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-system と default を除くその他すべての名前空間からデータを収集します。 Off 設定を使用すると、エージェントでは、kube-system と default を含むすべての名前空間からデータを収集します。 無効および認識されない名前空間は無視されます。 なし。 |
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 で Kubernetes 監視のプライベート リンクを有効にする」を参照してください。
- ネットワーク セキュリティ境界でコンテナー のログ記録を有効にするには、「ネットワーク セキュリティ境界を使用して Azure Monitor を構成 して Log Analytics ワークスペースを構成する」を参照してください。
- 高スケール モードを有効にするには、「監視アドオンの高スケール モードを有効にする」のオンボーディング プロセスに従います。 また、「ConfigMap の更新」の説明に従って ConfigMap を実行する必要があり、DCR ストリームを
Microsoft-ContainerLogV2
からMicrosoft-ContainerLogV2-HighScale
に変更する必要があります。
コントロール プレーン ログを有効にする
コントロール プレーン ログは、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
},
}
次のステップ
- オンボードの試行で問題が発生した場合は、 トラブルシューティング ガイドを確認してください。
- Azure portal Container Insights で Kubernetes 監視データを分析する 方法について説明します。