Container insights を使用して Kubernetes クラスターのパフォーマンスを監視する

Container insights で、ブック、パフォーマンス グラフ、正常性状態を使用して、Azure Kubernetes Service (AKS) や Azure Stack などの環境でホストされる Kubernetes クラスターのワークロードを監視します。

この記事は、2 つの観点と、検出された問題をすばやく評価、調査、解決するうえで Azure Monitor がどのように役立つかを理解するのに役立ちます。

Workbooks

Workbooks では、テキスト、ログ クエリ、メトリック、パラメーターが、クラスターのパフォーマンスを分析するために使用できる内容豊富な対話型レポートに組み合わされます。 Container insights で使用できるブックの説明およびそれらにアクセスする方法については、Container insights のブックに関する記事を参照してください。

Azure Monitor の複数クラスター ビュー

Azure Monitor には、サブスクリプション内のリソース グループに展開されているすべての監視対象 Kubernetes クラスターの正常性状態が表示される複数クラスター ビューが用意されています。 ここでは、ソリューションによって監視されない、すべての環境にわたって検出されたクラスターも表示されます。 このビューを使用して、すぐにクラスターの正常性を把握することができ、ノードとコントローラーのパフォーマンス ページにドリルダウンしたり、クラスターのパフォーマンス グラフを表示したりできます。 検出され、監視対象外として識別された AKS クラスターについては、いつでもこのビューから監視を有効にできます。

複数クラスター ビューにアクセスするには、Azure portal の左側のウィンドウで [モニター] を選択します。 [分析情報] セクションで [コンテナー] を選択します。

Azure Monitor の複数クラスター ダッシュボードの例を示すスクリーンショット。

グリッドに表示される結果のスコープを指定して、次のようなクラスターを表示できます。

  • Azure: Azure Kubernetes Service でホストされている AKS および AKS エンジン クラスター。
  • Azure Stack (プレビュー): Azure Stack でホストされている AKS エンジン クラスター。
  • Azure 以外 (プレビュー): オンプレミスでホストされている Kubernetes クラスター。
  • すべて: Azure、Azure Stack、Container insights にオンボードされたオンプレミスの環境でホストされているすべての Kubernetes クラスターを表示します。

特定の環境からクラスターを表示するには、左上隅の [環境] からそれを選択します。

環境セレクターの例を示すスクリーンショット。

[監視対象クラスター] タブでは次のことがわかります。

  • 重大または異常な状態のクラスターの数と、正常またはレポートしていない (不明状態と呼ばれます) クラスターの数。
  • すべての Azure Kubernetes エンジン (AKS エンジン) のデプロイが正常かどうか。
  • クラスターごとの、デプロイされているノード、ユーザー ポッド、システム ポッドの数。

含まれる正常性状態は次のとおりです。

  • 正常:VM では問題は検出されておらず、要求されたとおりに機能しています。
  • [高] :1 つまたは複数の重大な問題が検出されており、意図される正常な動作状態に戻すには対処する必要があります。
  • 警告:1 つまたは複数の問題が検出されており、対処する必要があります。対処しないと、正常性状態が重大になる可能性があります。
  • 不明:サービスがノードまたはポッドに接続できなかった場合、状態は不明に変わります。
  • 見つかりませんでした:ワークスペース、リソース グループ、またはこのソリューションのワークスペースを含むサブスクリプションのいずれかが削除されています。
  • 権限がありません:ユーザーはワークスペース内のデータを読み取るために必要なアクセス許可を持っていません。
  • Error: ワークスペースからデータを読み取るときにエラーが発生しました。
  • 間違った構成: 指定されたワークスペースで Container insights が正しく構成されませんでした。
  • データがありません:過去 30 分間にデータがワークスペースにレポートされていません。

クラスター全体の正常性状態は、1 つの例外を除き、3 つの状態のうち "最悪のもの" として計算されます。 3 つの状態のいずれかが不明の場合は、クラスター全体の状態も [不明] と表示されます。

次の表では、複数クラスター ビューでの監視対象クラスターの正常性状態を制御する計算の詳細を示します。

監視対象のクラスター Status 可用性
ユーザー ポッド Healthy
警告
Critical
Unknown
100%
90 ~ 99%
<90%
過去 30 分以内に報告していない
システム ポッド Healthy
警告
Critical
Unknown
100%
N/A
100%
過去 30 分以内に報告していない
Node Healthy
警告
Critical
Unknown
>85%
60 - 84%
<60%
過去 30 分以内に報告していない

クラスターの一覧からクラスターの名前を選択して、 [クラスター] ページにドリルダウンできます。 その後、その特定のクラスターの [ノード] 列でノードのロールアップを選択すると、 [ノード] パフォーマンス ページに移動します。 また、 [ユーザー ポッド] または [システム ポッド] 列のロールアップを選択して、 [コントローラー] パフォーマンス ページにドリルダウンすることもできます。

クラスターから直接、パフォーマンスを確認する

左側のペインで [Insights](分析情報)>[クラスター] を選択するか、マルチクラスター ビューからクラスターを選択すると、AKS クラスターから Container insights に直接アクセスできます。 実際のクラスターに関する情報は 4 つの観点にまとめられます。

  • クラスター
  • Nodes
  • コントローラー
  • Containers

Note

この記事の残りの部分で説明するエクスペリエンスでも、複数クラスター ビューからの選択時に Azure Stack または別の環境でホストされる Kubernetes クラスターのパフォーマンスと正常性状態を表示できます。

既定のページが開き、クラスターの主要なパフォーマンス メトリックを示す 4 つのパフォーマンス折れ線グラフが表示されます。

[クラスター] タブのパフォーマンス グラフの例を示すスクリーンショット。

パフォーマンス グラフには、4 つのパフォーマンス メトリックが表示されます。

  • ノード CPU 使用率 %: クラスタ全体の CPU 使用率の集約された視点。 時間範囲の結果をフィルタするには、グラフの上のパーセンタイル・セレクターで AvgMin50th90th95th、または Max を選択します。 フィルタは個別に使用することも、組み合わせて使用することもできます。
  • ノードのメモリ使用率: クラスター全体のメモリ使用率の集計されたパースペクティブ。 時間範囲の結果をフィルタするには、グラフの上のパーセンタイル・セレクターで AvgMin50th90th95th、または Max を選択します。 フィルタは個別に使用することも、組み合わせて使用することもできます。
  • ノード数:Kubernetes からのノードの数と状態。 表示されるクラスター ノードの状態は、[合計][準備完了][準備ができていません] です。 グラフの上のセレクターで個別にまたは組み合わせてフィルター処理できます。
  • アクティブなポッド数:Kubernetes からのポッドの数と状態。 表示されるポッドの状態は、[合計][保留中][実行中][不明][成功]、または [失敗] です。 グラフの上のセレクターで個別にまたは組み合わせてフィルター処理できます。

左と右方向キーを使用すると、グラフ上の各データ ポイントに順番に移動します。 上と下方向キーを使用すると、パーセンタイル ラインに順番に移動します。 いずれかのグラフの右上隅にあるピン アイコンを選択すると、最後に表示した Azure ダッシュボードに選択したグラフがピン留めされます。 ダッシュ ボードで、グラフのサイズおよび位置を変更できます。 ダッシュボードからグラフを選択すると、Container insights にリダイレクトされ、適切なスコープとビューが読み込まれます。

Container insights では Azure Monitor のメトリックス エクスプローラーもサポートされており、独自のプロット グラフの作成、傾向の関連付けと調査、およびダッシュボードへのピン留めを行うことができます。 メトリックス エクスプローラーでは、メトリックベースの警告ルールの基準として、実際のメトリックを視覚化するために設定した条件を使用することもできます。

メトリックス エクスプローラーでコンテナーのメトリックを表示する

メトリックス エクスプローラーで、Container insights からのノードとポッドの使用率のメトリックを集計して表示できます。 次の表は、メトリックのグラフを使用してコンテナーのメトリックを視覚化する方法の理解に役立つ詳細情報をまとめたものです。

名前空間 メトリック 説明
insights.container/nodes
cpuUsageMillicores クラスター全体で集計された CPU 使用率の測定値。 これは、CPU コアを 1,000 ユニット (ミリ = 1,000) に分割したものです。 多くのアプリケーションによって 1 つのコアが使用されている可能性があるコンテナーで、コアの使用状況を特定するために使用されます。
cpuUsagePercentage クラスター全体で集計された平均 CPU 使用率の測定値 (%)。
memoryRssBytes 使用中のコンテナー RSS メモリ (バイト数)。
memoryRssPercentage 使用中のコンテナー RSS メモリ (%)。
memoryWorkingSetBytes 使用中のコンテナーのワーキングセット メモリ。
memoryWorkingSetPercentage 使用中のコンテナーのワーキングセット メモリ (%)。
nodesCount Kubernetes からのノードの数。
insights.container/pods
PodCount Kubernetes からのポッドの数。

メトリックを分割してディメンションごとに表示したり、セグメント間の比較を視覚化したりできます。 ノードの場合は、"ホスト" ディメンションでグラフをセグメント化できます。 ポッドの場合は、次のディメンションでセグメント化できます。

  • コントローラー
  • Kubernetes 名前空間
  • Node
  • 段階

ノード、コントローラー、コンテナーの正常性を分析する

NodesControllersContainers タブに切り替えると、ページの右側にプロパティペインが自動的に表示されます。 これには、Kubernetes オブジェクトを整理するために定義したラベルを含む、選択した項目のプロパティが表示されます。 Linux ノードが選択されている場合、Local Disk Capacity セクションには、利用可能なディスク容量と、ノードに提示されている各ディスクの使用割合も表示されます。 ペイン内の >> リンクを選択すると、ペインを表示または非表示にできます。

階層内のオブジェクトを展開すると、選択されたオブジェクトに基づいて、プロパティ ウィンドウが更新されます。 ウィンドウから、ウィンドウの上部にある [ライブ イベント] タブを選択して、Kubernetes コンテナー ログ (stdout/stderror)、イベント、およびポッド メトリックを表示することもできます。 このデータを表示するためのアクセス権の付与および管理に必要な構成について詳しくは、ライブ データの設定に関する記事をご覧ください。

クラスター リソースのレビュー中は、コンテナーからこのデータをリアルタイムで確認できます。 この機能の詳細については、「Kubernetes ログ、イベント、およびポッド メトリックをリアルタイムで表示する方法」を参照してください。

事前に定義されたログ検索に基づいてワークスペースに格納されている Kubernetes ログ データを表示するには、[分析で表示する] ドロップダウン リストから [コンテナー ログの表示] を選択します。 詳細については、「Container insights のログのクエリを実行する方法」を参照してください。

ページ上部の [+ フィルターの追加] オプションを使用して、 [サービス][ノード][名前空間] 、または [ノード プール] でビューの結果をフィルター処理します。 フィルター スコープを選択した後は、 [Select value(s)](値の選択) フィールドに表示される値のいずれかを選択します。 構成したフィルターは、AKS クラスターのいずれかの観点を表示するときにグローバルに適用されます。 数式は、等号のみがサポートされています。 最初のフィルターの上にさらに追加して、結果をさらに絞り込むことができます。 たとえば、ノードによるフィルターを指定した場合、2 番目のフィルターとしてはサービスまたは名前空間だけを選択できます。

あるタブで指定したフィルターは別のタブを選択しても引き続き適用されます。 指定されているフィルターの横にある [x] 記号を選択すると削除されます。

[ノード] タブに切り替えます。行階層は、実際のクラスター内のノードから始まる Kubernetes オブジェクト モデルに従っています。 ノードを展開すると、ノード上で実行されている 1 つまたは複数のポッドが表示されます。 複数のコンテナーがポッドにグループ化されている場合、階層内の最後の行として表示されます。 ホストでプロセッサまたはメモリが不足している場合、ホスト上で実行されている、ポッドに関連しないワークロードの数を確認することもできます。

パフォーマンス ビューの Kubernetes ノード階層の例を示すスクリーンショット。

Windows Server 2019 OS を実行している Windows Server コンテナーは、一覧内のすべての Linux ベースのノードの後に表示されます。 Windows Server ノードを展開すると、そのノード上で実行されている 1 つ以上のポッドおよびコンテナーを表示できます。 ノードを選択すると、プロパティ ウィンドウにバージョン情報が表示されます。

Windows Server ノードが一覧表示されているノード階層の例を示すスクリーンショット。

Linux OS を実行している Azure Container Instances 仮想ノードは、一覧内の最後の AKS クラスター ノードの後に表示されます。 Container Instances 仮想ノードを展開すると、そのノード上で実行されている 1 つ以上の Container Instances ポッドおよびコンテナーを表示できます。 メトリックは、ノードではなく、ポッドについてのみ収集およびレポートされます。

Container Instances が一覧表示されているノード階層の例を示すスクリーンショット。

展開されたノードでは、ノード上で実行されているポッドまたはコンテナーからコントローラーにドリルダウンして、そのコントローラーでフィルター処理されたパフォーマンス データを見ることができます。 特定のノードの [コントローラー] 列の値を選択します。

パフォーマンス ビューでノードからコントローラーにドリルダウンする様子を示すスクリーンショット。

ページ上部のコントローラーまたはコンテナーを選択し、それらのオブジェクトの状態やリソース使用率を確認します。 メモリ使用率を確認するには、[メトリック] ドロップダウン リストで [メモリ RSS] または [メモリ ワーキング セット] を選択します。 [Memory RSS](使用メモリ (RSS)) は、Kubernetes 1.8 以降でのみサポートされています。 それ以外では、Min % の値が、未定義または表示できない値を示す数値データ型である、NaN % として示されます。

コンテナー ノード パフォーマンス ビューを示すスクリーンショット。

メモリ ワーキング セットは、含まれている常駐メモリと仮想メモリ (キャッシュ) の両方を示し、アプリケーションが使用している合計になります。 メモリ RSS は、メイン メモリだけ (常駐メモリのみ) を示します。 このメトリックは、使用可能なメモリの実際の容量を示します。 常駐メモリと仮想メモリにはどのような違いがあるのでしょうか。

  • 常駐メモリまたはメイン メモリは、クラスターのノードで使用可能なコンピューターのメモリの実際の容量です。
  • 仮想メモリは、メモリ不足時にメモリからディスクにデータをスワップするためにオペレーティング システムによって使用される予約済みハードディスク領域 (キャッシュ) であり、必要に応じてメモリにフェッチされます。

既定では、パフォーマンス データは、過去 6 時間のものですが、左上にある [時間範囲] オプションを使用して時間枠を変更できます。 パーセンタイル セレクターで [最小][平均][50][90][95][最大] を選択して、時間範囲内の結果をフィルター処理することもできます。

データのフィルターのパーセンタイル選択を示すスクリーンショット。

[傾向] 列の棒グラフ上にポインターを置くと、選択したメトリックに応じて、15 分のサンプル期間内の CPU またはメモリ使用率が各棒に表示されます。 キーボードからトレンド グラフを選択した後は、Alt + PageUp キーまたは Alt + PageDown キーを使用すると、それぞれの棒に個別に移動します。 棒の上にポインターを移動した場合と同じ詳細が表示されます。

トレンド横棒グラフのマウス ポイントの例を示すスクリーンショット。

次の例では、一覧の先頭にあるノード aks-nodepool1- は、[コンテナー] の値が 25 です。 この値はデプロイされているコンテナーの合計数のロールアップです。

ノードあたりのコンテナーのロールアップの例を示すスクリーンショット。

この情報は、実際のクラスター内にあるノード間のコンテナーのバランスが適切かどうかをすばやく識別するのに役立ちます。

次の表では、 [ノード] タブを表示した場合に示される情報について説明します。

内容
名前 ホストの名前。
Status ノードの状態の Kubernetes ビュー。
Min % ((%) 最小)、Avg % ((%) 平均)、50th % ((%) 50)、90th % ((%) 90)、95th % ((%) 95)、Max % ((%) 最大) 選択した期間中の、パーセンタイルに基づいたノードの平均率。
最小、平均、50、90、95、最大 選択した期間中の、パーセンタイルに基づいたノードの実際の平均値。 平均値は、ノードに設定されている CPU とメモリの制限から測定されます。 ポッドとコンテナーの場合は、ホストによってレポートされた平均値です。
Containers コンテナーの数。
Uptime ノードが起動または再起動されてから経過した時間を示します。
コントローラー コンテナーとポッド限定。 どのコントローラーに存在しているかが示されます。 コントローラーにないポッドもあるため、一部は N/A と表示される可能性があります。
Trend Min % (傾向 (%) 最小)、Avg % (傾向 (%) 平均)、50th % (傾向 (%) 50)、90th % (傾向 (%) 90)、95th % (傾向 (%) 95)、Max % (傾向 (%) 最大) 棒グラフの傾向は、コントローラーの平均パーセンタイル メトリック率を表しています。

[他のプロセス] という名前のノードを展開した後、ワークロードに気付くこともあります。 これはノード上で実行されるコンテナー化されていないプロセスを表し、次のものが含まれます。

  • 自己管理型またはマネージド Kubernetes のコンテナー化されていないプロセス。
  • コンテナーの実行時プロセス。
  • Kubelet。
  • ノードで実行されているシステム プロセス。
  • ノード ハードウェアまたは VM 上で実行されている Kubernetes 以外の他のワークロード。

次の方法で計算されます: "CAdvisor からの合計使用量" - "コンテナー化されたプロセスからの使用量"。

セレクターで、 [コントローラー] を選択します。

コントローラーの選択を示すスクリーンショット。

ここでは、ご使用のコントローラー、およびコントローラーに接続されていない Container Instances 仮想ノード コントローラーまたは仮想ノード ポッドのパフォーマンスの正常性を確認できます。

\<名前> コントローラーのパフォーマンス ビューを示すスクリーンショット。

行階層はコントローラーから始まります。 コントローラーを展開すると、1 つまたは複数のポッドが表示されます。 ポッドを展開すると、ポッドにグループ化されているコンテナーが最後の行に表示されます。 展開されたコントローラーからは、それが実行されているノードにドリルダウンして、そのノードでフィルター処理されたパフォーマンス データを見ることができます。 コントローラーに接続されていない Container Instances ポッドは一覧の最後に表示されます。

Container Instances ポッドが一覧表示されている [コントローラー] 階層の例を示すスクリーンショット。

特定のコントローラーの [ノード] 列の値を選択します。

パフォーマンス ビューでのコントローラーからノードへのドリルダウンの例を示すスクリーンショット

次の表では、コントローラーを表示した場合に示される情報について説明します。

内容
名前 コントローラーの名前。
Status [OK][終了][失敗][停止][一時停止] など、実行完了後のコンテナーのロールアップ状態。 コンテナーが実行されているのに状態が正しく表示されない、またはエージェントによって状態が認識されず、30 分を超えても応答しない場合は、 [不明] 状態になります。 状態アイコンのその他の詳細については、次の表を参照してください。
Min % ((%) 最小)、Avg % ((%) 平均)、50th % ((%) 50)、90th % ((%) 90)、95th % ((%) 95)、Max % ((%) 最大) 各エンティティの選択されたメトリックとパーセンタイルの平均率のロールアップ平均。
最小、平均、50、90、95、最大 選択されたパーセンタイルのコンテナーの平均 CPU ミリコアまたはメモリ パフォーマンスのロールアップ。 平均値は、ポッドに設定されている CPU/メモリ制限から測定されます。
Containers コントローラーまたはポッドのコンテナーの合計数。
Restarts コンテナーの再起動数のロールアップ。
Uptime コンテナーが起動されてからの経過時間を表します。
Node コンテナーとポッド限定。 どのコントローラーに存在しているかが示されます。
Trend Min % (傾向 (%) 最小)、Avg % (傾向 (%) 平均)、50th % (傾向 (%) 50)、90th % (傾向 (%) 90)、95th % (傾向 (%) 95)、Max % (傾向 (%) 最大) 棒グラフの傾向は、コントローラーの平均パーセンタイル メトリックを表しています。

状態フィールドのアイコンは、コンテナーのオンライン状態を示します。

アイコン Status
実行中 (準備完了) 状態アイコン。
待機中または一時停止状態アイコン。 待機中または一時停止
最後に報告された実行中の状態アイコン。 最後にレポートされた実行中。ただし、30 分を超えても応答しない
正常な状態アイコン。 正常に停止したか、停止に失敗した

状態アイコンには、ポッドでの指定内容に基づいた数が示されます。 これは、最も良くない 2 つの状態を示しています。 状態の上にマウス ポインターを移動すると、コンテナー内のすべてのポッドのロールアップ状態が表示されます。 準備完了の状態がない場合、状態の値は (0) と表示されます。

セレクターで、 [コンテナー] を選択します。

コンテナーの選択を示すスクリーンショット。

ここでは、AKS および Azure Container Instances コンテナーのパフォーマンスの正常性を確認できます。

\<名前> コンテナーのパフォーマンス ビューを示すスクリーンショット。

コンテナーからは、ポッドまたはノードにドリルダウンして、そのオブジェクトでフィルター処理されたパフォーマンス データを見ることができます。 特定のコンテナーの [ポッド] または [ノード] 列の値を選択します。

パフォーマンス ビューでのノードからコンテナーへのドリルダウンの例を示すスクリーンショット

次の表では、コンテナーを表示した場合に示される情報について説明します。

内容
名前 コントローラーの名前。
Status 存在する場合、コンテナーの状態です。 状態アイコンのその他の詳細については、次の表を参照してください。
Min % ((%) 最小)、Avg % ((%) 平均)、50th % ((%) 50)、90th % ((%) 90)、95th % ((%) 95)、Max % ((%) 最大) 各エンティティの選択されたメトリックとパーセンタイルの平均率のロールアップ。
最小、平均、50、90、95、最大 選択されたパーセンタイルのコンテナーの平均 CPU ミリコアまたはメモリ パフォーマンスのロールアップ。 平均値は、ポッドに設定されている CPU/メモリ制限から測定されます。
Pod ポッドが存在するコンテナーです。
Node  コンテナーが存在するノードです。
Restarts コンテナーが起動されてからの経過時間を表します。
Uptime コンテナーが起動または再起動されてからの経過時間を表します。
Trend Min % (傾向 (%) 最小)、Avg % (傾向 (%) 平均)、50th % (傾向 (%) 50)、90th % (傾向 (%) 90)、95th % (傾向 (%) 95)、Max % (傾向 (%) 最大) 棒グラフの傾向は、コンテナーの平均パーセンタイル メトリック率を表しています。

状態フィールドのアイコンは、次の表の説明のとおり、ポッドのオンライン状態を示します。

アイコン Status
実行中 (準備完了) 状態アイコン。
待機中または一時停止状態アイコン。 待機中または一時停止
最後に報告された実行中の状態アイコン。 最後に報告された実行中。ただし、30 分を超えても応答しない
信頼された状態のアイコン。 正常に停止したか、停止に失敗した
失敗状態アイコン。 失敗の状態

ネットワーク構成の監視と視覚化

Azure ネットワーク ポリシー マネージャーには、お客様のネットワーク構成を監視して理解を深めるために使用できる有益な Prometheus メトリックが含まれています。 Azure portal または Grafana Labs に組み込まれている視覚化を提供します。 詳細については、「Azure NPM を使用したネットワーク構成の監視と視覚化」を参照してください。

よく寄せられる質問

このセクションでは、一般的な質問への回答を示します。

ノード ビューで [その他のプロセス] は何を表していますか?

[その他のプロセス] は、ノードのリソース使用率が高い根本原因を明確に理解するのに役立つことを目的としています。 この情報は、コンテナー化されたプロセスとコンテナー化されていないプロセスの使用を区別するのに役立ちます。

これらの [その他のプロセス] とは何ですか?

ノードで実行されるコンテナー化されていないプロセスのことです。

これはどのようにして計算しますか?

その他のプロセス = "CAdvisor からの合計使用量" - "コンテナー化されたプロセスからの使用量"

[その他のプロセス] には、次のものが含まれます。

  • 自己管理型 Kubernetes またはマネージド Kubernetes のコンテナー化されていないプロセス。
  • コンテナーの実行時プロセス。
  • Kubelet。
  • ノードで実行されているシステム プロセス。
  • ノード ハードウェアまたは VM 上で実行されている Kubernetes 以外の他のワークロード。

次のステップ