Azure Kubernetes Service (AKS) を監視する

Azure リソースに依存するクリティカルなアプリケーションとビジネス プロセスがある場合は、それらのリソースの可用性、パフォーマンス、操作を監視する必要があります。 この記事では、AKS によって生成され、Azure Monitor で分析される監視データについて説明します。 Azure Monitor を使用するすべての Azure サービスにとって共通する機能に詳しくない場合は、「Azure Monitor を使用した Azure リソースの監視」を参照してください。

重要

Kubernetes は多数の可動部分を持つ複雑な分散システムであるため、複数のレベルでの監視が必要です。 AKS はマネージド Kubernetes サービスですが、複数のレベルでの監視に関して同じ厳しさが依然として必要です。 この記事では、AKS クラスターを監視するための高度な情報とベスト プラクティスについて説明します。 詳細については、次を参照してください。

データの監視

AKS では、「Azure リソースからの監視データ」で説明されている他の Azure リソースと同じ種類の監視データが生成されます。 AKS によって作成されるメトリックとログの詳細については、AKS データの監視のリファレンスに関するページを参照してください。 他の Azure サービスと機能は、他のデータを収集し、次の図と表に示すように他の分析オプションを有効にします。

Diagram of collection of monitoring data from AKS.

ソース 説明
プラットフォームのメトリック AKS クラスターのプラットフォームのメトリックは、コストなしで自動的に収集されます。 これらのメトリックは、メトリックス エクスプローラーで分析することも、メトリック アラートのために利用することもできます。
Prometheus メトリック メトリックスクレイピングを有効にすると、Prometheus メトリックは、Prometheus 用の Azure Monitor マネージド サービスによって収集され、Azure Monitor ワークスペースに格納されます。 それらは、Azure Managed Grafana事前構築済みダッシュボードPrometheus アラートを使用して分析します。
アクティビティ ログ AKS クラスターのアクティビティ ログは、コストなしで自動的に収集されます。 これらのログでは、いつクラスターが作成されたかや、いつクラスターの構成変更があったかといった情報を追跡します。 アクティビティ ログを Log Analytics ワークスペースに送信して、他のログ データと共に分析します。
リソース ログ AKS のコントロール プレーンのログは、リソース ログとして実装されています。 診断設定を作成して Log Analytics ワークスペースに送信します。そこで、Log Analytics のログ クエリを使用して分析とアラートの作成を行えます。
Container insights Container 分析情報では、クラスターから、stdout/stderr ストリームを含むさまざまなログとパフォーマンス データを収集し、Log Analytics ワークスペースAzure Monitor のメトリックに格納します。 このデータは、Container 分析情報に含まれるビューとブック、または Log Analyticsメトリックス エクスプローラーを使用して分析します。

Azure portal の [監視の概要] ページ

[概要] ページの [監視] タブは、Azure portal ですばやく各 AKS クラスターの監視データの表示を開始する方法となっています。 これには、ノード プールによって分割されたクラスターの一般的なメトリックが表示されるグラフが含まれます。 これらのグラフのいずれかをクリックして、メトリックス エクスプローラーでさらにデータを分析します。

[概要] ページには、現在のクラスターの [マネージド Prometheus][コンテナー分析情報] へのリンクも含まれています。 これらのツールをまだ有効にしていない場合は、有効にするように求められます。 また、クラスターの監視を向上させるために他の機能を有効にすることを推奨するバナーが画面の上部に表示される場合もあります。

Screenshot of AKS overview page.

ヒント

監視機能には、サブスクリプション内のすべての AKS クラスターに対してであれば Azure portal の [監視] メニューから、1 つの AKS クラスターに対してであれば [Kubernetes サービス] メニューの [監視] セクションからアクセスします。

統合

Azure Monitor の次の Azure サービスと機能は、Kubernetes クラスターの追加の監視に使用できます。 これらの機能は、AKS クラスターの作成時に、Azure portal、Azure CLI、Terraform、Azure Policy の [統合] タブから有効にすることも、後でクラスターにオンボードすることもできます。 これらの各機能にはコストが発生する可能性があるため、有効にする前にそれぞれの価格情報を参照してください。

サービスまたは機能 説明
Container insights コンテナー化されたバージョンの Azure Monitor エージェントを使用して、クラスター内の各ノードから stdout/stderr ログ と Kubernetes イベントを収集して、AKS クラスターのさまざまな監視シナリオをサポートします。 Azure CLIAzure Policy、Azure portal または Terraform を使用して、AKS クラスターの作成時に監視を有効にすることができます。 クラスターの作成時に Container 分析情報を有効にしていない場合は、「Azure Kubernetes Service (AKS) クラスターの Container 分析情報を有効にする」を参照し、他のオプションでそれを有効にしてください。

コンテナー分析情報は、そのデータの大部分を Log Analytics ワークスペースに格納し、通常はクラスターの リソース ログ と同じログ分析ワークスペースを使用します。 使用する必要があるワークスペースの数と、それらを配置する場所については、「Log Analytics ワークスペース アーキテクチャを設計する」を参照してください。
Prometheus 用の Azure Monitor マネージド サービス Prometheus は、Cloud Native Compute Foundation のクラウドネイティブ メトリック ソリューションで、Kubernetes クラスターからメトリック データを収集して分析するために使用される最も一般的なツールです。 Prometheus 用 Azure Monitor マネージド サービスは、Azure での、フル マネージド Prometheus 互換監視ソリューションです。 クラスターの作成時にマネージド Prometheus を有効にしていない場合は、「AKS クラスターから Prometheus メトリックを収集する」を参照し、他のオプションでそれを有効にしてください。

Prometheus 用 Azure Monitor マネージド サービスでは、データを Azure Monitor ワークスペースに格納します。そこは Grafana ワークスペースにリンクされているため、Azure Managed Grafana を使用してデータを分析できます。
Azure Managed Grafana Grafana のフル マネージド実装。これは、Prometheus データを表示するために一般的に使用される、オープンソースのデータの可視化プラットフォームです。 Kubernetes の監視とフル スタックのトラブルシューティングのために、複数の定義済みの Grafana ダッシュボードを使用できます。 クラスターの作成時にマネージド Grafana を有効にしていない場合は、クラスターの Prometheus メトリックにアクセスできるように Grafana ワークスペースを Azure Monitor ワークスペースにリンクすることに関して、「Grafana ワークスペースをリンクする」の詳細を参照してください。

メトリック

メトリックは、クラスターの監視、問題の特定、AKS クラスターでのパフォーマンスの最適化において重要な役割を果たします。 プラットフォーム メトリックは、kube-system 名前空間にインストールされている既定のメトリック サーバーを使用してキャプチャされます。このサーバーは、Kubelet によって提供されるすべての Kubernetes ノードからメトリックを定期的に収集します。 また、Azure Managed Prometheus メトリックを有効にして、コンテナー メトリックと Kubernetes オブジェクト メトリック (デプロイのオブジェクトの状態など) を収集する必要があります。 「AKS クラスターから Prometheus メトリックを収集して、Prometheus の Azure マネージド サービスにデータを送信する」を参照してください。

Screenshot of enabling Managed Prometheus for existing cluster.

ログ

AKS コントロール プレーン/リソース ログ

AKS クラスターのコントロール プレーンのログは、Azure Monitor のリソース ログとして実装されています。 リソース ログは、診断設定を作成して 1 つ以上の場所にルーティングするまでは収集および格納されません。 それらは通常、Log Analytics ワークスペースに送信します。そこが、Container 分析情報のほとんどのデータが格納される場所です。

Azure portal、CLI、または PowerShell を使用して診断設定を作成する詳細な手順については、「診断設定を作成する」を参照してください。 診断設定を作成するときは、収集するログのカテゴリを指定します。 AKS のカテゴリは、AKS 監視データのリファレンスに記載されています。

重要

AKS のリソース ログ収集時には、かなり大きなコストが生じる可能性があります (特に kube-audit ログの場合)。 収集されるデータの量を減らすために、次の推奨事項を検討してください。

  • 不要な場合は、kube-audit ログを無効にします。
  • kube-audit-admin からの収集を有効にします。この場合、監査イベントの取得と一覧表示が除外されます。
  • 以下で説明するようにリソース固有のログを有効にし、AKSAudit テーブルを基本ログとして構成します。

その他の推奨事項については、「Azure サービスとクラウド ネイティブ ツールを使用して Kubernetes クラスターを監視する」を、監視コストを減らすためのその他の戦略については、「コストの最適化と Azure Monitor」を参照してください。

Screenshot of AKS diagnostic setting dialog box.

AKS では、リソース ログに対して Azure 診断 モードまたはリソース固有モードがサポートされています。 これにより、データが送信される Log Analytics ワークスペース内のテーブルが指定されます。 Azure 診断モードでは、すべてのデータが AzureDiagnostics テーブルに送信されますが、リソース固有のモードでは、「リソース ログ」の表に示されているように、AKS 監査AKS 監査管理AKS コントロール プレーンにデータが送信されます。

次の理由から、AKS ではリソース固有モードをお勧めします。

  • データは AKS 専用の個々のテーブル内にあるため、クエリがより簡単です。
  • 大幅なコスト削減のための基本ログとしての構成がサポートされます。

既存の設定を変更する方法など、コレクション モードの違いの詳細については、「コレクション モードを選択する」を参照してください。

Note

コレクション モードを選択する機能は、すべてのリージョンの Azure portal ではまだ使用できません。 まだ使用できないリージョンでは、CLI を使って、次のようなコマンドで診断設定を作成します。

az monitor diagnostic-settings create --name AKS-Diagnostics --resource /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/myresourcegroup/providers/Microsoft.ContainerService/managedClusters/my-cluster --logs '[{""category"": ""kube-audit"",""enabled"": true}, {""category"": ""kube-audit-admin"", ""enabled"": true}, {""category"": ""kube-apiserver"", ""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}]'  --workspace /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/myresourcegroup/providers/microsoft.operationalinsights/workspaces/myworkspace --export-to-resource-specific true

サンプル ログ クエリ

重要

AKS クラスターのメニューから [ログ] を選択すると、クエリのスコープが現在のクラスターに設定された状態で Log Analytics が開かれます。 つまり、ログ クエリには、そのリソースからのデータのみが含まれます。 他のクラスターのデータや他の Azure サービスのデータを含むクエリを実行する場合は、[Azure Monitor] メニューから [ログ] を選択します。 詳細については、「Azure Monitor Log Analytics のログ クエリのスコープと時間範囲」を参照してください。

クラスターの診断設定で Azure 診断 モードが使用されている場合、AKS のリソース ログは AzureDiagnostics テーブルに格納されます。 異なるログは、カテゴリ列で区別できます。 各カテゴリの説明については、「AKS リファレンス リソース ログを」参照してください。

説明 Log query
各カテゴリのログをカウントする
(Azure 診断モード)
AzureDiagnostics
| where ResourceType == "MANAGEDCLUSTERS"
| summarize count() by Category
すべての API サーバー ログ
(Azure 診断モード)
AzureDiagnostics
| where Category == "kube-apiserver"
時間範囲内のすべての kube-audit ログ
(Azure 診断モード)
let starttime = datetime("2023-02-23");
let endtime = datetime("2023-02-24");
AzureDiagnostics
| where TimeGenerated between(starttime..endtime)
| where Category == "kube-audit"
| extend event = parse_json(log_s)
| extend HttpMethod = tostring(event.verb)
| extend User = tostring(event.user.username)
| extend Apiserver = pod_s
| extend SourceIP = tostring(event.sourceIPs[0])
| project TimeGenerated, Category, HttpMethod, User, Apiserver, SourceIP, OperationName, event
すべての監査ログ
(リソース固有モード)
AKSAudit
get および list 監査イベントを除くすべての監査ログ
(リソース固有モード)
AKSAuditAdmin
すべての API サーバー ログ
(リソース固有モード)
AKSControlPlane
| where Category == "kube-apiserver"

Log Analytics ワークスペース内の一連の事前構築済みクエリにアクセスするには、Log Analytics のクエリ インターフェイスを表示し、リソースの種類として [Kubernetes Services] を選択します。 Container 分析情報の一般的なクエリの一覧については、Container 分析情報クエリに関するページを参照してください。

AKS データ プレーン/Container Insights ログ

Container Insights では、コンテナーと Kubernetes クラスターからさまざまな種類のテレメトリ データが収集され、AKS クラスターで実行されているコンテナー化されたアプリケーションの監視、トラブルシューティング、分析情報の取得に役立ちます。 コンテナーの分析情報で使用されるテーブルの一覧と詳細な説明については、「Azure Monitor のテーブル リファレンス」を参照してください。 これらのテーブルはすべて、ログ クエリで使用できます。

コスト最適化の設定 では、コンテナー分析情報エージェントを使用して収集されたメトリック データをカスタマイズおよび制御できます。 この機能は、個々のテーブル選択、データ収集間隔、および名前空間のデータ収集設定をサポートし、Azure Monitor Data Collection Rules (DCR) を使用してデータ収集を除外します。 これらの設定により、インジェストの量が制御され、Container Insights の監視コストが削減されます。 コンテナー分析情報の収集データは、次のオプションを使用して、Azure portal 経由でカスタマイズできます。 [すべて] (既定) 以外のオプションを選択すると、コンテナーの分析情報エクスペリエンスが使用できなくなります。

グループ化 テーブル Notes
すべて (既定値) すべての標準コンテナー分析情報テーブル 既定のコンテナー分析情報の視覚化を有効にするために必要
パフォーマンス Perf、InsightsMetrics
ログとイベント ContainerLog または ContainerLogV2、KubeEvents、KubePodInventory マネージド Prometheus メトリックを有効にしている場合に推奨
ワークロード、デプロイ、および HPA InsightsMetrics、KubePodInventory、KubeEvents、ContainerInventory、ContainerNodeInventory、KubeNodeInventory、KubeServices
永続的ボリューム InsightsMetrics、KubePVInventory

Screenshot of AKS data plane logs collection configuration page.

ログとイベント のグループ化では、ContainerLog または ContainerLogV2KubeEventsKubePodInventory テーブルから ログがキャプチャされますが、メトリックはキャプチャされません。 メトリックを収集するための推奨パスは、AKS クラスターから Prometheus 用の Azure Monitor マネージド サービス Prometheus for Prometheus を有効にし、データの視覚化に Azure Managed Grafana を使用することです。 詳細については、「Azure Monitor ワークスペースの管理」を参照してください。

ContainerLogV2 スキーマ

Azure Monitor Container Insights には、ContainerLogV2 と呼ばれるコンテナー ログのスキーマが用意されています。これは推奨されるオプションです。 この形式には、AKS および Azure Arc 対応 Kubernetes クラスターに関連するデータを表示するための一般的なクエリを容易にするために、次のフィールドが含まれています:

  • ContainerName
  • PodName
  • PodNamespace

さらに、このスキーマは Basic Logs データ プランと互換性があり、標準の分析ログに代わる低コストの代替手段が提供されます。 Basic ログ データ プランでは、デバッグ、トラブルシューティング、監査には使用するが、分析やアラートにはしない大量の詳細ログを Log Analytics ワークスペースに取り込んで保存するコストを削減できます。 詳細については、「Log Analytics ワークスペースのテーブルを管理する」を参照してください。 ContainerLogV2 は推奨されるアプローチであり、ARM、Bicep、Terraform、Policy、およびAzure portal を使用してマネージド ID 認証を使用してコンテナー分析情報をオンボードするお客様の既定のスキーマです。 クラスターのデータ収集規則 (DCR) または ConfigMap を使用して ContainerLogV2 を有効にする方法の詳細については、「ContainerLogV2 スキーマを有効にする」を参照してください。

視覚化

データの視覚化は、システム管理者や運用エンジニアが収集した情報を簡単に使用できるようにする重要な概念です。 生データを見る代わりに、ビジュアル表現を使用して、データをすばやく表示し、生データを見るときに非表示になる可能性がある傾向を明らかにすることができます。 データの視覚化には、Grafana ダッシュボードまたはネイティブ Azure ブックを使用できます。

Azure Managed Grafana

Prometheus データを分析して表示する最も一般的な方法は、Grafana ダッシュボードを使用することです。 Azure Managed Grafana には、Kubernetes クラスターを監視するための事前構築済みのダッシュボード が含まれており、これには Container Insights ビューと同様の情報を示すダッシュボードがいくつか含まれています。 また、Prometheus によって収集されたメトリックから Kubernetes クラスターの複数の側面を視覚化するための、コミュニティで作成されたさまざまなダッシュボードもあります。

Screenshot of Grafana.

Workbooks

Azure Monitor ブック は、データ分析と豊富なビジュアル レポートの作成のための柔軟なキャンバスを提供する Azure Monitor の機能です。 ブックを使用すると、データ分析に役立つビジュアル レポートを作成するのに役立ちます。 Container Insights のレポートは、推奨されるすぐに使える Azure ブックです。 Azure には、Azure Portal からアクセスできる Azure Kubernetes Service (AKS) を含む、サービスごとに組み込みのブックが用意されています。 Azure portal の [Azure Monitor] メニューで、[コンテナー] を選択します。 モニタリング セクションで 分析情報 を選択し、特定のクラスターを選択し、 レポート タブを選択します。また、Azure Monitor の ワークブック ギャラリー から表示することもできます。

たとえば、 クラスター最適化ブック には、Kubernetes クラスターの正常性とパフォーマンスをすばやく表示できる複数のアナライザーが用意されています。 クラスターに関連するさまざまな情報を提供する複数のアナライザーがあります。 クラスターで Container insights が有効になると、ブックの構成は必要ありません。 顕著な機能には、ライブネス プローブの障害とその頻度の検出、アクセス性の高い分析のためのイベント ボリュームの最近の増加を示すイベントの異常の特定とグループ化、CPU とメモリの上限と要求の高いコンテナーまたは低いコンテナーの識別、および AKS クラスターで実行されているこれらのコンテナーの推奨される制限と要求値が含まれます。これらのブックの詳細については、「Container insights のレポート」を参照してください。

警告

Azure Monitor アラートは、Azure Monitor で収集されたデータがクラウド インフラストラクチャまたはアプリケーションに問題がある可能性があることを示したときに事前に通知することで、ユーザーが問題に気付く前に問題を検出して対処するのに役立ちます。 これにより、ユーザーが気付く前に、管理者が問題を識別して対処できます。 アラートはメトリックログアクティビティ ログに対して設定できます。 アラートの種類に応じて、さまざまな利点と欠点があります。

Container insights では、Prometheus メトリックまたはプラットフォーム メトリックに基づいて、2 種類のメトリック ルールが使用されます。

Prometheus メトリックベースのアラート

クラスターに対して Prometheus メトリックの収集を有効にすると、推奨される Prometheus アラート ルールのコレクションをダウンロードできます。 これには以下のルールが含まれています。

Level 警告
ポッド レベル KubePodCrashLooping
ジョブが時間内に完了しませんでした
過去 1 時間にポッド コンテナーが再起動された
準備完了ポッドの割合が 80% を下回る
失敗した状態のポッド数が 0 より多い
KubePodNotReadyByController
KubeStatefulSetGenerationMismatch
KubeJobNotCompleted
KubeJobFailed
コンテナーあたりの平均 CPU 使用率が 95% を超える
コンテナーあたりの平均メモリ使用率が 95% を超える
KubeletPodStartUpLatencyHigh
クラスター レベル 平均 PV 使用率が 80% を超える
KubeDeploymentReplicasMismatch
KubeStatefulSetReplicasMismatch
KubeHpaReplicasMismatch
KubeHpaMaxedOut
KubeCPUQuotaOvercommit
KubeMemoryQuotaOvercommit
KubeVersionMismatch
KubeClientErrors
CPUThrottlingHigh
KubePersistentVolumeFillingUp
KubePersistentVolumeInodesFillingUp
KubePersistentVolumeErrors
Node レベル ノードの平均 CPU 使用率が 80% を超える
ノードのワーキング セット メモリが 80% を超える
OOM により中止されたコンテナーの数が 0 より多い
KubeNodeUnreachable
KubeNodeNotReady
KubeNodeReadinessFlapping
KubeContainerWaiting
KubeDaemonSetNotScheduled
KubeDaemonSetMisScheduled
KubeletPlegDurationHigh
KubeletServerCertificateExpiration
KubeletClientCertificateRenewalErrors
KubeletServerCertificateRenewalErrors
KubeQuotaAlmostFull
KubeQuotaFullyUsed
KubeQuotaExceeded

プラットフォーム メトリック ベースのアラート

次の表に、AKS クラスターに対して推奨されるメトリック アラート ルールを示します。 これらのアラートは、クラスターのプラットフォーム メトリックに基づいています。

条件 説明
CPU 使用率 (%) > 95 すべてのノードにわたる平均 CPU 使用率がしきい値を超えると発生します。
メモリ ワーキング セット (%) > 100 すべてのノードにわたる平均ワーキング セットがしきい値を超えると発生します。

ログ ベースのアラート

ログ アラートを 使用すると、データ プレーンコントロール プレーン ログでアラートを生成できます。 定義済みの間隔でクエリを実行し、結果に基づいてアラートを作成します。 特定のレコードの数を確認したり、数値列に基づいて計算を実行したりできます。

Container Insights からログ アラートを作成する方法」と「Container Insights からログを照会する方法」を参照してください。 ログ アラート では、さまざまなシナリオで監視することができる次の 2 つの異なる事柄を測定できます:

  • 結果数: クエリによって返された行の数をカウントします。Windows イベント ログ、Syslog、アプリケーション例外などのイベントを操作するのに使用できます。
  • 値の計算: 数値列に基づいて計算を行います。任意の数のリソースを含めるために使用できます。 たとえば、CPU の割合です。

必要なアラート シナリオに応じて、 now 演算子を使用して 1 時間戻すことで、DateTime と現在の時刻を比較するログ クエリを作成する必要があります。 ログ ベースのアラートを作成する方法については、「Container insights からログ アラートを作成する」を参照してください。

ネットワークの監視

ネットワーク監視 は、正常でパフォーマンスの高い Kubernetes クラスターを維持するための重要な部分です。 ネットワーク トラフィックに関するデータを収集し分析することで、クラスターがどのように動作しているかを把握し、障害やパフォーマンス低下を引き起こす前に潜在的な問題を特定できます。

Network Observability アドオンを有効にすると、有用なメトリックが収集され、Prometheus 形式に変換され、これは Grafana で視覚化できます。 有効にすると、収集されたメトリックは Prometheus の Azure Monitor マネージド サービスに自動的に取り込まれます。 Grafana ダッシュボードは、Prometheus によって収集されたネットワーク監視メトリックを視覚化するために、Grafana パブリック ダッシュボード リポジトリで使用できます。 詳細な手順については、「ネットワーク監視のセットアップ」を参照してください。

次のステップ