Azure Monitor ログによるコンテナー グループおよびインスタンスのログ記録

Log Analytics ワークスペースは、Azure リソースからだけでなく、オンプレミスのリソースや他のクラウドのリソースからのログ データも格納して照会できる一元的な場所を提供します。 Azure Container Instances には、ログとイベント データを Azure Monitor ログに送信するための組み込みサポートが含まれています。

コンテナー グループのログとイベント データを Azure Monitor ログに送信するには、コンテナー グループを構成するときに既存の Log Analytics ワークスペース ID とワークスペース キーを指定します。

以下のセクションでは、ログ記録が有効なコンテナー グループの作成方法と、ログに対するクエリの実行方法について説明します。 また、ワークスペース ID とワークスペースキーでコンテナー グループを更新して、ログ記録を有効にすることもできます。

注意

この記事は最近、Log Analytics ではなく Azure Monitor ログという用語を使うように更新されました。 ログ データは引き続き Log Analytics ワークスペースに格納され、同じ Log Analytics サービスによって収集されて分析されます。 Azure Monitor のログの役割をより適切に反映させるために、用語を更新しています。 詳しくは、Azure Monitor の用語の変更に関するページをご覧ください。

前提条件

コンテナー インスタンスでログ記録を有効にするには、次のものが必要です。

Log Analytics の資格情報を取得する

Azure Container Instances が Log Analytics ワークスペースにデータを送信するには、アクセス許可が必要です。 このアクセス許可を付与し、ログ記録を有効にするには、コンテナー グループを作成するときに、Log Analytics ワークスペース ID と、そのキーの 1 つ (プライマリまたはセカンダリ) を提供する必要があります。

ログ分析ワークスペースの ID とプライマリ キーを取得するには:

  1. Azure portal で Log Analytics ワークスペースに移動します
  2. [設定][Agents management]\(エージェント管理\) を選択します
  3. 次の値を書き留めておきます。
    • ワークスペース ID
    • 主キー

コンテナー グループを作成する

ログ分析のワークスペース ID とプライマリ キーがわかったので、ログ記録が有効なコンテナー グループを作成できます。

次の例は、1 つの fluentd コンテナーで構成されるコンテナー グループを作成する 2 つの方法を示しています。1 つは Azure CLI を使用する方法で、もう 1 つは Azure CLI と YAML テンプレートを使用する方法です。 fluentd コンテナーは、既定の構成で複数の出力行を生成します。 この出力は Log Analytics ワークスペースに送信されるため、ログの表示とクエリのデモンストレーションに適しています。

Azure CLI でのデプロイ

Azure CLI でデプロイするには、az container create コマンドで --log-analytics-workspace パラメーターと --log-analytics-workspace-key パラメーターを指定します。 次のコマンドを実行する前に、2 つのワークスペースの値を前の手順で取得した値に置き換えます (また、リソース グループ名を更新します)。

Note

次の例では、パブリック コンテナー イメージを Docker Hub からプルします。 匿名の pull request を行うのではなく、Docker Hub アカウントを使用して認証するようにプル シークレットを設定することをお勧めします。 パブリック コンテンツを操作するときの信頼性を向上させるために、プライベートの Azure Container Registry にイメージをインポートして管理します。 パブリック イメージの操作に関する詳細を参照してください

az container create \
    --resource-group myResourceGroup \
    --name mycontainergroup001 \
    --image fluent/fluentd:v1.3-debian-1 \
    --log-analytics-workspace <WORKSPACE_ID> \
    --log-analytics-workspace-key <WORKSPACE_KEY>

YAML でのデプロイ

YAML でコンテナー グループをデプロイしたい場合にはこの方法を使用します。 次の YAML は、1 つのコンテナーが含まれたコンテナー グループを定義します。 YAML を新しいファイルにコピーしてから、LOG_ANALYTICS_WORKSPACE_IDLOG_ANALYTICS_WORKSPACE_KEY を前の手順で取得した値に置き換えます。 ファイルを deploy-aci.yaml として保存します。

Note

次の例では、パブリック コンテナー イメージを Docker Hub からプルします。 匿名の pull request を行うのではなく、Docker Hub アカウントを使用して認証するようにプル シークレットを設定することをお勧めします。 パブリック コンテンツを操作するときの信頼性を向上させるために、プライベートの Azure Container Registry にイメージをインポートして管理します。 パブリック イメージの操作に関する詳細を参照してください

apiVersion: 2019-12-01
location: eastus
name: mycontainergroup001
properties:
  containers:
  - name: mycontainer001
    properties:
      environmentVariables: []
      image: fluent/fluentd:v1.3-debian-1
      ports: []
      resources:
        requests:
          cpu: 1.0
          memoryInGB: 1.5
  osType: Linux
  restartPolicy: Always
  diagnostics:
    logAnalytics:
      workspaceId: LOG_ANALYTICS_WORKSPACE_ID
      workspaceKey: LOG_ANALYTICS_WORKSPACE_KEY
tags: null
type: Microsoft.ContainerInstance/containerGroups

次に、以下のコマンドを実行してコンテナー グループをデプロイします。 myResourceGroup をサブスクリプション内のリソース グループに置き換えます (または、"myResourceGroup" という名前のリソース グループを最初に作成します)。

az container create --resource-group myResourceGroup --name mycontainergroup001 --file deploy-aci.yaml

コマンドを発行した直後に、Azure から展開の詳細を含む応答を受け取るはずです。

ログを表示する

コンテナー グループをデプロイした後、最初のログ エントリが Azure portal に表示されるまでに数分 (最大 10 分) かかることがあります。

ContainerInstanceLog_CL テーブル内のコンテナー グループのログを表示するには、次の手順を実行します。

  1. Azure portal で Log Analytics ワークスペースに移動します
  2. [全般][ログ] を選択します
  3. クエリ ContainerInstanceLog_CL | limit 50 を入力します
  4. [実行] を選択します

クエリによっていくつかの結果が表示されます。 最初に結果が何も表示されない場合は、数分待ってから、 [実行] ボタンを選択してクエリをもう一度実行します。 既定では、ログ エントリはテーブル形式で表示されます。 その後、行を展開して個々のログ エントリの内容を表示できます。

Azure portal のログ検索の結果

イベントの表示

コンテナー インスタンスのイベントは、Azure portal で確認することもできます。 イベントには、インスタンスが作成された時刻やいつ開始されたかが含まれています。 ContainerEvent_CL テーブル内のイベント データを表示するには、次の手順に従います。

  1. Azure portal で Log Analytics ワークスペースに移動します
  2. [全般][ログ] を選択します
  3. クエリ ContainerEvent_CL | limit 50 を入力します
  4. [実行] を選択します

クエリによっていくつかの結果が表示されます。 最初に結果が何も表示されない場合は、数分待ってから、 [実行] ボタンを選択してクエリをもう一度実行します。 既定では、エントリがテーブル形式で表示されます。 その後、行を展開して個々のエントリの内容を表示できます。

Azure portal でのイベント検索の結果

コンテナー ログのクエリを実行する

Azure Monitor ログには、何千行にもなる可能性があるログ出力から情報を抽出ための広範なクエリ言語が含まれます。

クエリの基本構造では、ソース テーブル (この記事では ContainerInstanceLog_CL または ContainerEvent_CL) の後に、一連の演算子をパイプ文字 (|) で区切って記述します。 複数の演算子を連結して結果を絞り込み、高度な機能を実行できます。

クエリ結果の例を見るには、クエリ テキスト ボックスに次のクエリを貼り付けてから、 [実行] ボタンを選択してクエリを実行します。 このクエリは、"Message" フィールドに "warn" という単語が含まれるすべてのログ エントリを表示します。

ContainerInstanceLog_CL
| where Message contains "warn"

さらに複雑なクエリもサポートされています。 たとえば、次のクエリでは、過去 1 時間以内に生成された "mycontainergroup001" コンテナー グループのログ エントリのみが表示されます。

ContainerInstanceLog_CL
| where (ContainerGroup_s == "mycontainergroup001")
| where (TimeGenerated > ago(1h))

ログのスキーマ

Note

次の表に一覧表示された列の一部はスキーマの一部としてのみ存在し、ログ内にはデータが生成されません。 これらの列には、説明で 'Empty' と示されています。

ContainerInstanceLog_CL

Column タイプ 説明
Computer string Empty
ContainerGroup_s string レコードに関連付けられているコンテナー グループの名前
ContainerID_s string レコードに関連付けられているコンテナーの一意識別子
ContainerImage_s string レコードに関連付けられているコンテナー イメージの名前
Location_s string レコードに関連付けられているリソースの場所
Message string (該当する場合) コンテナーからのメッセージ
OSType_s string コンテナーが基づいているオペレーティング システムの名前
RawData string Empty
ResourceGroup string レコードが関連付けられているリソース グループの名前
Source_s string ログ コンポーネント "LoggingAgent" の名前
SubscriptionId string レコードが関連付けられているサブスクリプションの一意識別子
TimeGenerated DATETIME イベントに対応する要求を処理する Azure サービスによってイベントが生成されたときのタイムスタンプ
Type string テーブルの名前
_ResourceId string レコードが関連付けられているリソースの一意識別子
_SubscriptionId string レコードが関連付けられているサブスクリプションの一意識別子

ContainerEvent_CL

Column タイプ 説明
Computer string Empty
ContainerGroupInstanceId_g string レコードに関連付けられているコンテナー グループの一意識別子
ContainerGroup_s string レコードに関連付けられているコンテナー グループの名前
ContainerName_s string レコードに関連付けられているコンテナーの名前
Count_d real 最後のポーリング以降にイベントが発生した回数
FirstTimestamp_t DATETIME イベントが最初に発生したときのタイムスタンプ
Location_s string レコードに関連付けられているリソースの場所
Message string (該当する場合) コンテナーからのメッセージ
OSType_s string コンテナーが基づいているオペレーティング システムの名前
RawData string Empty
Reason_s string コンテナー グループの現在の状態
ResourceGroup string レコードが関連付けられているリソース グループの名前
SubscriptionId string レコードが関連付けられているサブスクリプションの一意識別子
TimeGenerated DATETIME イベントに対応する要求を処理する Azure サービスによってイベントが生成されたときのタイムスタンプ
Type string テーブルの名前
_ResourceId string レコードが関連付けられているリソースの一意識別子
_SubscriptionId string レコードが関連付けられているサブスクリプションの一意識別子

診断設定の使用

コンテナー グループの診断設定はプレビュー機能であり、Azure portal のプレビュー機能オプションを使用して有効にすることができます。 サブスクリプションに対してこの機能を有効にすると、診断設定をコンテナー グループに適用できます。 診断設定を適用すると、コンテナー グループが再起動します。

たとえば、New-AzDiagnosticSetting コマンドを使用して、診断設定オブジェクトをコンテナー グループに適用する方法を次に示します。

$log = @()
$log += New-AzDiagnosticSettingLogSettingsObject -Enabled $true -Category ContainerInstanceLog -RetentionPolicyDay 7 -RetentionPolicyEnabled $true
 
New-AzDiagnosticSetting -Name test-setting -ResourceId <container-group-resource-id> -WorkspaceId <log-analytics-workspace-id> -Log $log

次のステップ

Azure Monitor ログ

Azure Monitor ログでのログのクエリとアラートの構成について詳しくは、以下をご覧ください。

コンテナーの CPU とメモリを監視する

コンテナー インスタンスの CPU とメモリ リソースの監視については、以下をご覧ください。