次の方法で共有


AKS クラスターの監視を有効にする

Azure Monitor での Kubernetes 監視で説明されているように、Azure Monitor の複数の機能が連携して、Azure Kubernetes Service (AKS) クラスターの完全な監視が提供されます。 この記事では、AKS クラスターで次の機能を有効にする方法について説明します。

  • Prometheus 指標
  • Managed Grafana
  • コンテナーのログ記録
  • コントロール プレーン ログ

前提条件

  • オンボードのためには、クラスターに対する少なくとも共同作成者アクセス権が必要です。
  • 監視が有効になった後でデータを表示するには、監視閲覧者または監視共同作成者が必要です。

ワークスペースを作成する

次の表では、この記事で有効になっている Azure Monitor 機能をサポートするために必要なワークスペースについて説明します。 各種類の既存のワークスペースがまだない場合は、オンボード プロセスの一環としてワークスペースを作成できます。 作成するワークスペースの数と配置場所については、「Log Analytics ワークスペース アーキテクチャを設計する」をご覧ください。

機能 ワークスペース メモ
マネージド Prometheus Azure Monitor ワークスペース オンボード時に既存の Azure Monitor ワークスペースを指定しない場合は、リソース グループの既定のワークスペースが使用されます。 クラスターのリージョンに既定のワークスペースがまだ存在しない場合は、DefaultAzureMonitorWorkspace-<mapped_region> という形式の名前を持つワークスペースが、DefaultRG-<cluster_region> という名前のリソース グループに作成されます。

アドオンが Azure Monitor ワークスペースにデータを送信できるようにするには、Contributor のアクセス許可があれば十分です。 Azure Managed Grafana でメトリックを表示するために Azure Monitor ワークスペースをリンクするには、Owner レベルのアクセス許可が必要になります。 これが必要である理由は、オンボード ステップを実行するユーザーが、メトリックのクエリを実行するために Azure Monitor ワークスペースで Azure Managed Grafana システム ID Monitoring Reader ロールを付与できる必要があるためです。
コンテナーのログ記録
コントロール プレーン ログ
Log Analytics ワークスペース クラスターは、同じ Microsoft Entra テナント内の別の Azure サブスクリプション内の Log Analytics ワークスペースにアタッチできますが、Azure CLI または Azure Resource Manager テンプレートを使用する必要があります。 現在、Azure portal ではこの構成を実行できません。

既存のクラスターを別のサブスクリプションの Log Analytics ワークスペースに接続する場合は、 Microsoft.ContainerService リソース プロバイダーをサブスクリプションに Log Analytics ワークスペースに登録する必要があります。 詳細については、「リソース プロバイダーを登録する」 を参照してください。

既存の Log Analytics ワークスペースを指定しないと、リソース グループの既定のワークスペースが使われます。 クラスターのリージョンに既定のワークスペースがまだ存在していない場合は、DefaultWorkspace-<GUID>-<Region> という形式の名前で作成されます。

既定のワークスペースに使用する、サポートされているマッピング ペアの一覧については、コンテナー分析情報でサポートされているリージョンのマッピングに関するページを参照してください。 ネットワーク セキュリティ境界を使用してワークスペースを構成する方法については、「ネットワーク セキュリティ境界を使用した Azure Monitor の構成」を参照してください。
Managed Grafana Azure Managed Grafana ワークスペース Grafana ワークスペースを Azure Monitor ワークスペースにリンクして、クラスターから収集された Prometheus メトリックを Grafana ダッシュボードで使用できるようにします。

Prometheus メトリックとコンテナー ログを有効にする

クラスターで Prometheus とコンテナー のログ記録を有効にすると、コンテナー化されたバージョンの Azure Monitor エージェント がクラスターにインストールされます。 これらの機能は、新規または既存のクラスターで同時に構成することも、各機能を個別に有効にすることもできます。

Prometheus メトリックのスクレイピングを有効にすると同時に、クラスターに対して Managed Grafana を有効にします。 Azure Monitor ワークスペースと Azure Managed Grafana ワークスペースを接続するためのオプションについては、Grafana ワークスペースのリンクに関する記事をご覧ください。

前提条件

  • クラスターではマネージド ID 認証を使用する必要があります。
  • 次のリソース プロバイダーは、クラスターと Azure Monitor ワークスペースのサブスクリプションに登録する必要があります。
    • マイクロソフト・コンテナーサービス
    • Microsoft.Insights
    • Microsoft.AlertsManagement
    • マイクロソフト.モニター
  • Grafana ワークスペース サブスクリプションのサブスクリプションには、次のリソース プロバイダーが登録されている必要があります。
    • Microsoft ダッシュボード

前提条件

  • CLI バージョン 2.49.0 以降では、マネージド ID 認証が既定です。
  • コマンドを使って、aks-preview 拡張機能を az extension remove --name aks-preview必要があります。

Prometheus 指標

新しいクラスターを作成するか、既存のクラスターを更新して Prometheus メトリックをスクレープするメトリック アドオンをインストールするかに応じて、-enable-azure-monitor-metrics または az aks update オプションを使用します。 これは、 Azure Monitor の既定の Prometheus メトリック構成で説明されている構成を使用します。 この構成を変更するには、「 Prometheus の Azure Monitor マネージド サービスでの Prometheus メトリックのスクレーピングのカスタマイズ」を参照してください。

次の例を参照してください。

### Use default Azure Monitor workspace
az aks create/update --enable-azure-monitor-metrics --name <cluster-name> --resource-group <cluster-resource-group>

### Use existing Azure Monitor workspace
az aks create/update --enable-azure-monitor-metrics --name <cluster-name> --resource-group <cluster-resource-group> --azure-monitor-workspace-resource-id <workspace-name-resource-id>

### Use an existing Azure Monitor workspace and link with an existing Grafana workspace
az aks create/update --enable-azure-monitor-metrics --name <cluster-name> --resource-group <cluster-resource-group> --azure-monitor-workspace-resource-id <azure-monitor-workspace-name-resource-id> --grafana-resource-id  <grafana-workspace-name-resource-id>

### Use optional parameters
az aks create/update --enable-azure-monitor-metrics --name <cluster-name> --resource-group <cluster-resource-group> --ksm-metric-labels-allow-list "namespaces=[k8s-label-1,k8s-label-n]" --ksm-metric-annotations-allow-list "pods=[k8s-annotation-1,k8s-annotation-n]"

az aks create/update --enable-azure-monitor-metrics --name "my-cluster" --resource-group "my-resource-group" --azure-monitor-workspace-resource-id "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/my-resource-group/providers/microsoft.monitor/accounts/my-workspace"

省略可能なパラメーター

上記の各コマンドでは、次の省略可能なパラメーターを使用できます。 パラメーター名はそれぞれ異なりますが、使用は同じです。

パラメーター 名前と説明
注釈キー --ksm-metric-annotations-allow-list

リソースの kube_resource_annotations メトリックで使用される Kubernetes 注釈キーのコンマ区切りの一覧。 たとえば、kube_pod_annotations はポッド リソースの注釈メトリックです。 既定では、このメトリックには名前と名前空間のラベルのみが含まれます。 注釈をさらに含めるには、複数形のリソース名と、それらを許可する Kubernetes 注釈キーの一覧を指定します。 リソースごとに 1 つの * を指定して任意の注釈を許可できますが、これはパフォーマンスに重大な影響を及ぼします。 たとえば、pods=[kubernetes.io/team,...],namespaces=[kubernetes.io/team],... のようにします。
ラベルのキー --ksm-metric-labels-allow-list

リソースの kube_resource_labels メトリック kube_resource_labels メトリックで使用されるその他の Kubernetes ラベル キーのコンマ区切りリスト。 たとえば、kube_pod_labels はポッド リソースのラベル メトリックです。 既定では、このメトリックには名前と名前空間のラベルのみが含まれます。 さらに多くのラベルを含めるには、複数形のリソース名のリストと、それらに対して許可する Kubernetes ラベル キーを指定します。リソースごとに 1 つの * を指定して任意のラベルを許可できますが、これはパフォーマンスに重大な影響を及ぼします。 たとえば、pods=[app],namespaces=[k8s-label-1,k8s-label-n,...],... のようにします。
レコーディング ルール --enable-windows-recording-rules

Windows ダッシュボードを適切に機能させるために必要な記録ルール グループを有効にすることができます。

コンテナーログ

--addon monitoring オプションを使用して az aks create で新しいクラスターを作成するか、az aks enable-addon で既存のクラスターを更新してコンテナー ログの収集を有効にします。 ログ収集の設定を変更するには、以下を参照してください。

次の例を参照してください。

### Use default Log Analytics workspace
az aks enable-addons --addon monitoring --name <cluster-name> --resource-group <cluster-resource-group-name>

### Use existing Log Analytics workspace
az aks enable-addons --addon monitoring --name <cluster-name> --resource-group <cluster-resource-group-name> --workspace-resource-id <workspace-resource-id>

### Use custom log configuration file
az aks enable-addons --addon monitoring --name <cluster-name> --resource-group <cluster-resource-group-name> --workspace-resource-id <workspace-resource-id> --data-collection-settings dataCollectionSettings.json

### Use legacy authentication
az aks enable-addons --addon monitoring --name <cluster-name> --resource-group <cluster-resource-group-name> --workspace-resource-id <workspace-resource-id> --enable-msi-auth-for-monitoring false

az aks enable-addons --addon monitoring --name "my-cluster" --resource-group "my-resource-group" --workspace-resource-id "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/my-resource-group/providers/Microsoft.OperationalInsights/workspaces/my-workspace"

ログ構成ファイル

クラスターのログ収集設定をカスタマイズするには、次の形式を使用して構成を JSON ファイルとして指定します。 構成ファイルを指定しない場合は、次の表に示す既定の設定が使用されます。

{
  "interval": "1m",
  "namespaceFilteringMode": "Include",
  "namespaces": ["kube-system"],
  "enableContainerLogV2": true, 
  "streams": ["Microsoft-Perf", "Microsoft-ContainerLogV2"]
}

構成の各設定について、次の表で説明します。

名前 説明
interval エージェントでデータを収集する頻度を決定します。 有効な値は、1m 間隔で 1m から 30m です。値が許容範囲外の場合、既定値は 1 m です

既定値: 1m。
namespaceFilteringMode Include: namespaces フィールドの値からのみデータが収集されます。
Exclude: namespaces フィールドの値を除くすべての名前空間からデータが収集されます。
Off: namespace の選択を無視して、すべての名前空間でデータが収集されます。

既定値: オフ
namespaces namespaceFilteringMode に基づいてインベントリとパフォーマンス データを収集する Kubernetes 名前空間のコンマ区切り配列。
たとえば、Include 設定を指定した namespaces = ["kube-system", "default"] では、これら 2 つの名前空間のみが収集されます。 Exclude 設定の場合、エージェントは、kube-systemdefault を除くその他すべての名前空間からデータを収集します。 Off 設定を使用すると、エージェントでは、kube-systemdefault を含むすべての名前空間からデータを収集します。 無効および認識されない名前空間は無視されます。

なし。
enableContainerLogV2 ContainerLogV2 スキーマを有効にするブール型フラグ。 true に設定すると、stdout/stderr ログが ContainerLogV2 テーブルに取り込まれます。 それ以外の場合は、ConfigMap で特に指定されていない限り、コンテナー ログが ContainerLog テーブルに取り込まれます。 個々のストリームを指定する場合は、ContainerLog または ContainerLogV2 に対応するテーブルを含める必要があります。

既定値: True
streams テーブルストリームの配列。 有効なストリームとそれに対応するテーブルの一覧については、「ストリーム 」を参照してください。

既定値: ContainerLogV2、KubeEvents、KubePodInventory

ストリーム値

CLI または ARM を使用して、収集するテーブルを指定する場合、Log Analytics ワークスペース内の特定のテーブルに対応するストリーム名を指定します。 次の表は、各テーブルのストリーム名の一覧を示しています。

注意

データ収集ルールの構造についてよく理解している場合は、この表のストリーム名は DCR のデータ フローのセクションに指定されていることがお分かりになるでしょう。

Stream コンテナー分析情報テーブル
Microsoft-ContainerInventory ContainerInventory
Microsoft-ContainerLog ContainerLog
Microsoft-ContainerLogV2 ContainerLogV2
Microsoft-ContainerLogV2-HighScale ContainerLogV2 (高スケール モード)1
Microsoft-ContainerNodeInventory ContainerNodeInventory
Microsoft-InsightsMetrics InsightsMetrics
Microsoft-KubeEvents KubeEvents
Microsoft-KubeMonAgentEvents KubeMonAgentEvents
Microsoft-KubeNodeInventory KubeNodeInventory
Microsoft-KubePodInventory KubePodInventory
Microsoft-KubePVInventory KubePVInventory
Microsoft-KubeServices KubeServices
Microsoft-Perf Perf

1 Microsoft-ContainerLogV2 と Microsoft-ContainerLogV2-HighScale の両方を一緒に使用しないでください。 その結果、データの重複が生じます。

適用可能なテーブルとメトリック

収集頻度名前空間のフィルター処理の設定は、すべてのログ データには適用されません。 次の表に、Log Analytics ワークスペース内のテーブルと、それぞれに適用される設定を示します。

テーブル名 インターバル 名前空間 注釈
ContainerInventory イエス イエス
ContainerNodeInventory イエス いいえ Kubernetes ノードは名前空間スコープのリソースではないため、名前空間のデータ収集設定は適用されません
KubeNodeInventory イエス いいえ Kubernetes ノードは名前空間スコープのリソースではないため、名前空間のデータ収集設定は適用されません
KubePodInventory イエス イエス
KubePVInventory イエス イエス
KubeServices イエス イエス
KubeEvents いいえ イエス 間隔のデータ収集設定は、Kubernetes イベントには適用されません
Perf イエス イエス Kubernetes ノードは名前空間スコープを持つオブジェクトではないため、名前空間のデータ収集設定は Kubernetes ノード関連のメトリックには適用されません。
InsightsMetrics イエス イエス データ収集設定は、名前空間 container.azm.ms/kubestate、container.azm.ms/pv、container.azm.ms/gpu を収集するメトリックにのみ適用されます

注意

名前空間のフィルター処理は、ama-logs エージェント レコードには適用されません。 結果として、除外された名前空間の中に kube-system 名前空間がリストされている場合でも、ama-logs エージェント コンテナーに関連付けられているレコードは引き続き取り込まれます。

メトリック名前空間 インターバル 名前空間 注釈
Insights.container/nodes イエス いいえ ノードは名前空間スコープのリソースではありません
Insights.container/pods イエス イエス
Insights.container/containers イエス イエス
Insights.container/persistentvolumes イエス イエス

特殊なシナリオ

特定のシナリオの構成要件については、以下のリファレンスを参照してください。

コントロール プレーン ログを有効にする

コントロール プレーン ログは、Azure Monitor の リソース ログ として実装されます。 これらのログを収集するには、クラスターの 診断設定 を作成します。 コンテナー ログと同じ Log Analytics ワークスペースに送信します。

az monitor diagnostic-settings create コマンドを使用して、Azure CLI で診断設定を作成します。 パラメーターの説明については、このコマンドのドキュメントを参照してください。

次の例では、すべての Kubernetes カテゴリを Log Analytics ワークスペースに送信する診断設定を作成します。 これには、Microsoft.ContainerService/fleets のサポートされているリソース ログに記載されている特定のテーブルにログを送信するリソース固有のモードが含まれます。

az monitor diagnostic-settings create \
--name 'Collect control plane logs' \
--resource  /subscriptions/<subscription ID>/resourceGroups/<resource group name>/providers/Microsoft.ContainerService/managedClusters/<cluster-name> \
--workspace /subscriptions/<subscription ID>/resourcegroups/<resource group name>/providers/microsoft.operationalinsights/workspaces/<log analytics workspace name> \
--logs '[{"category": "karpenter-events","enabled": true},{"category": "kube-audit","enabled": true},
{"category": "kube-apiserver","enabled": true},{"category": "kube-audit-admin","enabled": true},{"category": "kube-controller-manager","enabled": true},{"category": "kube-scheduler","enabled": true},{"category": "cluster-autoscaler","enabled": true},{"category": "cloud-controller-manager","enabled": true},{"category": "guard","enabled": true},{"category": "csi-azuredisk-controller","enabled": true},{"category": "csi-azurefile-controller","enabled": true},{"category": "csi-snapshot-controller","enabled": true},{"category": "fleet-member-agent","enabled": true},{"category": "fleet-member-net-controller-manager","enabled": true},{"category": "fleet-mcs-controller-manager","enabled": true}]'
--metrics '[{"category": "AllMetrics","enabled": true}]' \
--export-to-resource-specific true

デプロイを検証する

エージェントが正しくデプロイされていることを確認するには、kubectl コマンド ライン ツールを使います。

マネージド Prometheus

DaemonSet が Linux ノード プールに正しくデプロイされたことを確認する

kubectl get ds ama-metrics-node --namespace=kube-system

ポッドの数は、クラスター上の Linux ノードの数と同じである必要があります。 出力は次の例のようになります。

User@aksuser:~$ kubectl get ds ama-metrics-node --namespace=kube-system
NAME               DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
ama-metrics-node   1         1         1       1            1           <none>          10h

Windows ノードが正しくデプロイされたことを確認する

kubectl get ds ama-metrics-win-node --namespace=kube-system

ポッドの数は、クラスター上の Windows ノードの数と同じである必要があります。 出力は次の例のようになります。

User@aksuser:~$ kubectl get ds ama-metrics-node --namespace=kube-system
NAME                   DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
ama-metrics-win-node   3         3         3       3            3           <none>          10h

Prometheus 用に 2 つのレプリカセットがデプロイされたことを確認する

kubectl get rs --namespace=kube-system

出力は次の例のようになります。

User@aksuser:~$kubectl get rs --namespace=kube-system
NAME                            DESIRED   CURRENT   READY   AGE
ama-metrics-5c974985b8          1         1         1       11h
ama-metrics-ksm-5fcf8dffcd      1         1         1       11h

コンテナーのログ記録

DaemonSet が Linux ノード プールに正しくデプロイされたことを確認する

kubectl get ds ama-logs --namespace=kube-system

ポッドの数は、クラスター上の Linux ノードの数と同じである必要があります。 出力は次の例のようになります。

User@aksuser:~$ kubectl get ds ama-logs --namespace=kube-system
NAME       DESIRED   CURRENT   READY     UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
ama-logs   2         2         2         2            2           <none>          1d

Windows ノードが正しくデプロイされたことを確認する

kubectl get ds ama-logs-windows --namespace=kube-system

ポッドの数は、クラスター上の Windows ノードの数と同じである必要があります。 出力は次の例のようになります。

User@aksuser:~$ kubectl get ds ama-logs-windows --namespace=kube-system
NAME                   DESIRED   CURRENT   READY     UP-TO-DATE   AVAILABLE   NODE SELECTOR     AGE
ama-logs-windows           2         2         2         2            2       <none>            1d

コンテナー ログ ソリューションのデプロイを確認する

kubectl get deployment ama-logs-rs --namespace=kube-system

出力は次の例のようになります。

User@aksuser:~$ kubectl get deployment ama-logs-rs --namespace=kube-system
NAME          READY   UP-TO-DATE   AVAILABLE   AGE
ama-logs-rs   1/1     1            1           24d

CLI を使って構成を表示する

ソリューションが有効になっているかどうか、Log Analytics ワークスペースのリソース ID、クラスターについての概要情報を確認するには、aks show コマンドを使います。

az aks show --resource-group <resourceGroupofAKSCluster> --name <nameofAksCluster>

コマンドは、ソリューションに関する JSON 形式の情報を返します。 addonProfiles セクションには、次の例のように omsagent に関する情報を含める必要があります。

"addonProfiles": {
    "omsagent": {
        "config": {
            "logAnalyticsWorkspaceResourceID": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/my-resource-group/providers/microsoft.operationalinsights/workspaces/my-workspace",
            "useAADAuth": "true"
        },
        "enabled": true,
        "identity": null
    },
}

次のステップ