Kube 状態指標を収集して表示する


このページでは、Google Cloud Managed Service for Prometheus を使用して、厳選された一連の Kube の状態(Deployment と Pod の指標を含む)を Cloud Monitoring に送信するように Google Kubernetes Engine(GKE)クラスタを構成する方法について説明します。このページでは、これらの指標が Monitoring に書き込まれる際の形式と、指標のクエリ方法についても説明します。

始める前に

始める前に、次の作業が完了していることを確認してください。

  • Google Kubernetes Engine API を有効にする。
  • Google Kubernetes Engine API の有効化
  • このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、gcloud components update を実行して最新のバージョンを取得する。

要件

Kube 状態指標を収集するには、GKE クラスタが次の要件を満たしている必要があります。

  • クラスタで GKE 1.27.2-gke.1200 以降を実行している必要があります。バージョン 1.29.2-gke.2000 以降の GKE Standard クラスタとバージョン 1.27.4-gke.900 以降の GKE Autopilot クラスタでは、Kube 状態指標パッケージがデフォルトで有効になっています。
  • クラスタでシステム指標が有効になっている。
  • クラスタで Google Cloud Managed Service for Prometheus マネージド コレクションが有効になっている。新しいクラスタでは、Google Cloud Managed Service for Prometheus マネージド コレクションがデフォルトで有効になっています。

Kube 状態指標の収集を構成する

kube 状態指標は、Google Cloud コンソール、gcloud CLI、または Terraform を使用して有効にできます。

コンソール

Kube 状態指標は、クラスタまたはクラスタ内の Deployment の [オブザーバビリティ] タブで有効にできます。指標パッケージを有効にする前に、使用可能なグラフと指標をプレビューすることもできます。

クラスタの [オブザーバビリティ] タブでは、Kube 状態指標のグラフのセットを次の 2 つの項目でフィルタできます。

  • ワークロードの状態: Pods、Deployments、StatefulSets、DaemonSets、HorizontalPodAutoscaler リソースの指標が含まれます。
  • [ストレージ] > [永続性]: 永続ボリュームと永続ボリュームの要求の指標が含まれます。

いずれかまたは両方の指標セットを有効にできます。

クラスタの [オブザーバビリティ] タブから Kube 状態指標を有効にするには、次の操作を行います。

  1. Google Cloud コンソールで、[Kubernetes クラスタ] ページに移動します。

    [Kubernetes クラスタ] に移動

    検索バーを使用してこのページを検索する場合は、小見出しが [Kubernetes Engine] である結果を選択します。

  2. クラスタの名前をクリックし、[オブザーバビリティ] タブを選択します。

  3. 機能のリストから [ワークロードの状態] または [ストレージ] > [永続性] を選択します。

  4. [パッケージを有効にする] をクリックします。

    Kube 状態指標パッケージがすでに有効になっている場合は、代わりに Kube 状態指標の一連のグラフが表示されます。

Deployment の [オブザーバビリティ] タブから Kube 状態指標を有効にするには、次の操作を行います。

  1. Google Cloud コンソールの [ワークロード] ページに移動します。

    [ワークロード] に移動

    検索バーを使用してこのページを検索する場合は、小見出しが [Kubernetes Engine] である結果を選択します。

  2. Deployment の名前をクリックし、[オブザーバビリティ] タブを選択します。

  3. 機能のリストから [Kube の状態] を選択します。

  4. [パッケージを有効にする] をクリックします。パッケージはクラスタ全体で有効になります。

    Kube 状態指標パッケージがすでに有効になっている場合は、Pod、Deployment、HorizontalPodAutoscaler の指標のセットのグラフが表示されます。

クラスタの [詳細] タブで Kube 状態指標を構成するには、次の操作を行います。

  1. Google Cloud コンソールで、[Kubernetes クラスタ] ページに移動します。

    [Kubernetes クラスタ] に移動

    検索バーを使用してこのページを検索する場合は、小見出しが [Kubernetes Engine] である結果を選択します。

  2. クラスタの名前をクリックします。

  3. [機能] で「Cloud Monitoring」というラベルの付いた行の編集アイコンをクリックします。

  4. 表示された [Cloud Monitoring の編集] ダイアログ ボックスで、[Cloud Monitoring を有効にする] が選択されていることを確認します。

  5. [コンポーネント] プルダウン メニューで、指標の収集元となる Kube 状態コンポーネントを選択します。

  6. [OK] をクリックします。

  7. [変更を保存] をクリックします。

gcloud

指標を収集するようにクラスタを更新します。

gcloud container clusters update CLUSTER_NAME \
    --location=COMPUTE_LOCATION \
    --enable-managed-prometheus \
    --monitoring=SYSTEM,DAEMONSET,DEPLOYMENT,HPA,POD,STATEFULSET,STORAGE

次のように置き換えます。

monitoring フラグに指定された値のセットは、以前の設定をオーバーライドします。

Terraform

Terraform を使用して kube 状態指標の収集を構成するには、google_container_cluster の Terraform レジストリmonitoring_config ブロックをご覧ください。Terraform と Google Cloud を使用する場合の一般的な情報については、Google Cloud での Terraform をご覧ください。

割り当て

Kube 状態指標は、Cloud Monitoring API の1 分あたりの時系列取り込みリクエストの割り当てを消費します。kube 状態指標を有効にする前に、その割り当ての直近のピーク使用量を確認してください。同じプロジェクトに多くのクラスタがある場合や、すでに割り当ての上限に近づいている場合は、いずれかのオブザーバビリティ パッケージを有効にする前に割り当ての上限の引き上げをリクエストできます。

料金

Kube 状態指標は、Google Cloud Managed Service for Prometheus を使用して、Cloud Monitoring に指標を読み込みます。Cloud Monitoring では、取り込まれたサンプルの数に基づいて、これらの指標の取り込みに対して課金されます。ただし、GKE Enterprise エディションが有効になっているプロジェクトに属する登録済みクラスタでは、これらの指標は無料です。

詳細については、Cloud Monitoring の料金をご覧ください。

指標の形式

Cloud Monitoring に書き込まれる Kubernetes kube 状態指標はすべてリソースタイプ prometheus_target を使用します。各指標名には接頭辞 prometheus.googleapis.com/ が使用され、Prometheus 指標タイプ(/gauge/histogram/counter など)を示す接尾辞が付いています。それ以外の場合、各指標名はオープンソースの Kubernetes によって公開される指標名と同一です。

Cloud Monitoring からのエクスポート

Kube 状態指標は、Cloud Monitoring API を使用して Cloud Monitoring からエクスポートできます。すべての kube 状態指標は Google Cloud Managed Service for Prometheus を使用して取り込まれるため、kube 状態指標は Prometheus Query Language(PromQL)を使用してクエリできます。Monitoring Query Language(MQL)を使用してクエリすることもできます。

指標のクエリ

kube 状態指標のクエリで使用する名前は、PromQL と Cloud Monitoring ベースの機能(MQL、Metrics Explorer のメニュー形式のインターフェースなど)のどちらを使用するかによって異なります。

次の kube 状態指標の表では、指標名を次の 2 つのバージョンで示しています。

  • PromQL の指標名: Google Cloud コンソールの Cloud Monitoring ページまたは Cloud Monitoring API の PromQL フィールドで PromQL を使用する場合は、PromQL の指標名を使用します。
  • Cloud Monitoring の指標名: 他の Monitoring 機能を使用する場合は、以下の表の Cloud Monitoring の指標名を使用します。この名前には prometheus.googleapis.com/ を付ける必要があります(表中の項目では省略されています)。

ストレージ指標

この表の Cloud Monitoring の指標名には、prometheus.googleapis.com/ という接頭辞を付ける必要があります。この接頭辞は、表中の項目では省略されています。

PromQL の指標名
Cloud Monitoring の指標名
種類、タイプ、単位
モニタリング対象リソース
必要な GKE バージョン
説明
ラベル
kube_persistentvolume_capacity_bytes
kube_persistentvolume_capacity_bytes/gauge
GAUGEDOUBLEBy
prometheus_target
1.27.2-gke.1200
Persistentvolume の容量(バイト単位)。30 秒ごとにサンプリングされます。

persistentvolume: persistentvolume.
kube_persistentvolume_claim_ref
kube_persistentvolume_claim_ref/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
永続ボリュームのクレーム参照に関する情報。30 秒ごとにサンプリングされます。

claim_name: claim_name.
name: name.
persistentvolume: persistentvolume.
kube_persistentvolume_info
kube_persistentvolume_info/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
persistentvolume に関する情報。30 秒ごとにサンプリングされます。

csi_driver: csi_driver.
csi_volume_handle: csi_volume_handle.
local_fs: local_fs.
local_path: local_path.
persistentvolume: persistentvolume.
storageclass: storageclass.
kube_persistentvolume_status_phase
kube_persistentvolume_status_phase/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
フェーズは、ボリュームが使用可能か、クレームにバインドされているか、クレームによってリリースされているかを示します。30 秒ごとにサンプリングされます。

persistentvolume: persistentvolume.
phase: phase.
kube_persistentvolumeclaim_info
kube_persistentvolumeclaim_info/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
永続ボリュームのクレームに関する情報。30 秒ごとにサンプリングされます。

persistentvolumeclaim: persistentvolumeclaim.
storageclass: storageclass.
volumename: volumename.
kube_persistentvolumeclaim_resource_requests_storage_bytes
kube_persistentvolumeclaim_resource_requests_storage_bytes/gauge
GAUGEDOUBLEBy
prometheus_target
1.27.2-gke.1200
永続ボリュームのクレームでリクエストされたストレージ容量。30 秒ごとにサンプリングされます。

persistentvolumeclaim: persistentvolumeclaim.
kube_persistentvolumeclaim_status_phase
kube_persistentvolumeclaim_status_phase/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
永続ボリュームのクレームの現在のフェーズ。30 秒ごとにサンプリングされます。

persistentvolumeclaim: persistentvolumeclaim.
phase: phase.

詳細については、PersistentVolume 指標PersistentVolumeClaim 指標をご覧ください。

Pod の指標

Pod とは、ストレージとネットワーク リソースを共有するコンテナの実行方法の仕様を備えた 1 つ以上のコンテナのグループです。

Pod の指標の表

Pod の指標を使用すると、Pod の動作のモニタリングとアラートの作成を行うことができます。次の表に、Kube 状態指標パッケージで使用可能な指標を示します。

この表の Cloud Monitoring の指標名には、prometheus.googleapis.com/ という接頭辞を付ける必要があります。この接頭辞は、表中の項目では省略されています。

PromQL の指標名
Cloud Monitoring の指標名
種類、タイプ、単位
モニタリング対象リソース
必要な GKE バージョン
説明
ラベル
kube_pod_container_status_ready
kube_pod_container_status_ready/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
コンテナ readiness チェックが成功したかどうかを示します。30 秒ごとにサンプリングされます。

container: container.
pod: pod.
uid: uid.
kube_pod_container_status_waiting_reason
kube_pod_status_container_status_waiting_reason/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
コンテナが待機状態になっている理由を示します。30 秒ごとにサンプリングされます。

container: container.
pod: pod.
reason: reason.
uid: uid.
kube_pod_status_phase
kube_pod_status_phase/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Pod の現在のフェーズ。30 秒ごとにサンプリングされます。

phase: phase.
pod: pod.
uid: uid.
kube_pod_status_unschedulable
kube_pod_status_unschedulable/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Pod のスケジューリング不可ステータスを示します。30 秒ごとにサンプリングされます。

pod: pod.
uid: uid.

詳細については、Pod の指標をご覧ください。

Pod の指標のサンプルクエリ

スケジュール不可の Pod があるかどうかを確認するには、次の PromQL 式を使用します。

sum(kube_pod_status_unschedulable{cluster="CLUSTER", namespace="NAMESPACE"})

Namespace 内のスケジュール不可の Pod の数に対してアラートを出すには、次の PromQL 式を使用します。

sum(kube_pod_status_unschedulable{cluster="CLUSTER", namespace="NAMESPACE"}) > LIMIT

kube_pod_container_status_waiting_reason 指標で、次のような PromQL 式を使用して、特定の待機状態で停止しているコンテナに対するアラートを作成できます。

max_over_time(kube_pod_container_status_waiting_reason{reason="REASON", cluster="CLUSTER", namespace="NAMESPACE"}[5m]) >= 1

REASON の値は、コンテナの待機状態を指定します。次に例を示します。

  • CrashLoopBackOff
  • ImagePullBackOff
  • ContainerCreating

いずれかの待機状態で停止したコンテナのアラートを作成するには、次の PromQL 式を使用します。

max_over_time(kube_pod_container_status_waiting_reason{cluster="CLUSTER", namespace="NAMESPACE"}[5m]) >= 1

readiness チェックに失敗したコンテナの数を確認するには、次の PromQL 式を使用します。

sum(kube_pod_container_status_ready) by (pod, container) == 0

このセクションのクエリとアラートの式の一部は、GitHub の Prometheus コミュニティ Kubernetes Helm チャート リポジトリの kubernetes-apps.yaml ファイルから使用されています。

インタラクティブ ハンドブック

Kube 状態指標は、スケジュール不可の Pod またはクラッシュ ループの Pod のトラブルシューティングに、GKE インタラクティブ ハンドブックでも使用されます。これらの障害モードの詳細については、次のトラブルシューティングのドキュメントをご覧ください。

Kube 状態指標パッケージが有効になっていない場合、Pod のスケジューリングの問題を検出する主な方法は、「Failed Scheduling」ログイベントのクエリを行うことです。Kube 状態指標パッケージを有効にすると、kube_pod_status_unschedulable 指標を使用できます。これは同じ目的を果たしますが、集計とグラフ化が簡単になります。この指標を使用すると、スケジュールできない Pod の数と、問題が発生した日時を確認できます。

同様に、GKE システム指標 kubernetes.io/container/restart_count を使用して、クラッシュ ループの Pod を検出できます。kube_pod_container_status_waiting_reason 指標でもクラッシュループの Pod を列挙して、Pod が CrashLookBackOff 以外の待機状態(ImagePullBackOffContainerCreating など)で停止しているかどうかを判断することもできます。

インタラクティブ ハンドブックを探すには、次の操作を行います。

  1. Google Cloud コンソールで [ダッシュボード] ページに移動します。

    [ダッシュボード] に移動

    検索バーを使用してこのページを検索する場合は、小見出しが「Monitoring」の結果を選択します。

  2. [GCP] カテゴリをクリックして、ダッシュボード リストをフィルタリングします。
  3. リスト内の「GKE Interactive Playbook」ダッシュボードの名前をクリックします。

Deployment の指標

Deployment は、Pod などのリソースの状態を更新して、ロールアウトや停止といったイベントを管理するコントローラです。

Deployment の指標の表

Deployment の指標を使用すると、コントローラの動作のモニタリングとアラートの作成を行うことができます。次の表に、Kube 状態指標パッケージで使用可能な指標を示します。

この表の Cloud Monitoring の指標名には、prometheus.googleapis.com/ という接頭辞を付ける必要があります。この接頭辞は、表中の項目では省略されています。

PromQL の指標名
Cloud Monitoring の指標名
種類、タイプ、単位
モニタリング対象リソース
必要な GKE バージョン
説明
ラベル
kube_deployment_spec_replicas
kube_deployment_spec_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Deployment に必要な Pod の数。30 秒ごとにサンプリングされます。

deployment: deployment.
kube_deployment_status_replicas_available
kube_deployment_status_replicas_available/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Deployment ごとの使用可能なレプリカの数。30 秒ごとにサンプリングされます。

deployment: deployment.
kube_deployment_status_replicas_updated
kube_deployment_status_replicas_updated/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Deployment ごとの更新されたレプリカの数。30 秒ごとにサンプリングされます。

deployment: deployment.

詳細については、Deployment の指標をご覧ください。

Deployment の指標のサンプルクエリ

Deployment の指標をクラスタ、Namespace、Deployment の名前でフィルタすることで、個々の Deployment のグラフとアラート ポリシーを作成できます。

たとえば、使用可能なレプリカの数と 1 つの Deployment で想定されるレプリカの数を比較する場合は、次の PromQL クエリを使用すると両方の指標を 1 つのグラフにプロットできます。

kube_deployment_spec_replicas{cluster="CLUSTER", namespace="NAMESPACE", deployment=DEPLOYMENT"}
および
kube_deployment_status_replicas_available{cluster="CLUSTER", namespace="NAMESPACE", deployment=DEPLOYMENT"}

失敗した Deployment または停滞している Deployment に対してアラートを出すには、次の PromQL 式を使用します。

(
  kube_deployment_spec_replicas{cluster="CLUSTER", namespace="NAMESPACE", deployment="DEPLOYMENT"}
    >
  kube_deployment_status_replicas_available{cluster="CLUSTER", namespace="NAMESPACE", deployment="DEPLOYMENT"}
) and (
  changes(kube_deployment_status_replicas_updated{cluster="CLUSTER", namespace="NAMESPACE", deployment="DEPLOYMENT"}[10m])
    ==
  0
)

このセクションのクエリとアラートの式の一部は、GitHub の Prometheus コミュニティ Kubernetes Helm チャート リポジトリの kubernetes-apps.yaml ファイルから使用されています。

StatefulSet の指標

StatefulSet は、ステートフル アプリケーションで一連の Pod のデプロイとスケーリングを管理するコントローラです。このコントローラは、Pod の順序と一意性を管理します。

StatefulSet の指標の表

StatefulSet の指標を使用すると、コントローラの動作のモニタリングとアラートの作成を行うことができます。次の表に、Kube 状態指標パッケージで使用可能な指標を示します。

この表の Cloud Monitoring の指標名には、prometheus.googleapis.com/ という接頭辞を付ける必要があります。この接頭辞は、表中の項目では省略されています。

PromQL の指標名
Cloud Monitoring の指標名
種類、タイプ、単位
モニタリング対象リソース
必要な GKE バージョン
説明
ラベル
kube_statefulset_replicas
kube_statefulset_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
StatefulSet に必要な Pod の数。30 秒ごとにサンプリングされます。

statefulset: statefulset.
kube_statefulset_status_replicas_ready
kube_statefulset_status_replicas_ready/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
StatefulSet ごとの準備完了レプリカの数。30 秒ごとにサンプリングされます。

statefulset: statefulset.
kube_statefulset_status_replicas_updated
kube_statefulset_status_replicas_updated/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
StatefulSet ごとの更新されたレプリカの数。30 秒ごとにサンプリングされます。

statefulset: statefulset.

詳細については、StatefulSet の指標をご覧ください。

StatefulSet の指標のサンプルクエリ

StatefulSet の指標をクラスタ、Namespace、StatefulSet の名前でフィルタリングすることで、個々の StatefulSet のグラフとアラート ポリシーを作成できます。

たとえば、使用可能なレプリカの数と 1 つの StatefulSet で想定されるレプリカの数を比較する場合は、次の PromQL クエリを使用すると両方の指標を 1 つのグラフにプロットできます。

kube_statefulset_replicas{cluster="CLUSTER", namespace="NAMESPACE", statefulset="STATEFULSET"}
および
kube_statefulset_status_replicas_ready{cluster="CLUSTER", namespace="NAMESPACE", statefulset="STATEFULSET"}

失敗した StatefulSet または停滞している StatefulSet に対してアラートを出すには、次の PromQL 式を使用します。

(
  kube_statefulset_replicas{cluster="CLUSTER", namespace="NAMESPACE", statefulset="STATEFULSET"}
    >
  kube_statefulset_status_replicas_ready{cluster="CLUSTER", namespace="NAMESPACE", statefulset="STATEFULSET"}
) and (
  changes(kube_statefulset_status_replicas_updated{cluster="CLUSTER", namespace="NAMESPACE", statefulset="STATEFULSET"}[10m])
    ==
  0
)

このセクションのクエリとアラートの式の一部は、GitHub の Prometheus コミュニティ Kubernetes Helm チャート リポジトリの kubernetes-apps.yaml ファイルから使用されています。

DaemonSet の指標

DaemonSet は、いくつかのノードのセットが Pod のコピーを実行するようにするコントローラです。たとえば、ノードがクラスタに追加されると、DaemonSet はそのノードに Pod を追加します。このコントローラは、特定のプロセスがすべてのノードで実行されるようにする場合に便利です。

DaemonSet の指標の表

DaemonSet の指標を使用すると、コントローラの動作のモニタリングとアラートの作成を行うことができます。次の表に、Kube 状態指標パッケージで使用可能な指標を示します。

この表の Cloud Monitoring の指標名には、prometheus.googleapis.com/ という接頭辞を付ける必要があります。この接頭辞は、表中の項目では省略されています。

PromQL の指標名
Cloud Monitoring の指標名
種類、タイプ、単位
モニタリング対象リソース
必要な GKE バージョン
説明
ラベル
kube_daemonset_status_desired_number_scheduled
kube_daemonset_status_desired_number_scheduled/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
デーモン Pod を実行するノードの数。30 秒ごとにサンプリングされます。

daemonset: daemonset.
kube_daemonset_status_number_misscheduled
kube_daemonset_status_number_misscheduled/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
想定外でデーモン Pod を実行しているノードの数。30 秒ごとにサンプリングされます。

daemonset: daemonset.
kube_daemonset_status_number_ready
kube_daemonset_status_number_ready/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
デーモン Pod を実行するノードで、1 つ以上のデーモン Pod が実行可能な状態になっているノードの数。30 秒ごとにサンプリングされます。

daemonset: daemonset.
kube_daemonset_status_updated_number_scheduled
kube_daemonset_status_updated_number_scheduled/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
更新されたデーモン Pod を実行しているノードの数。30 秒ごとにサンプリングされます。

daemonset: daemonset.

詳細については、DaemonSet の指標をご覧ください。

DaemonSet の指標のサンプルクエリ

DaemonSet の指標を、クラスタ、Namespace、DaemonSet の名前でフィルタすることで、個々の DaemonSet のグラフとアラート ポリシーを作成できます。

たとえば、使用可能なレプリカの数と 1 つの DaemonSet で想定されるレプリカの数を比較する場合は、次の PromQL クエリを使用すると両方の指標を 1 つのグラフにプロットできます。

kube_daemonset_status_updated_number_scheduled{cluster="CLUSTER", namespace="NAMESPACE", daemonsetset=DAEMONSET"}
および
kube_daemonset_status_desired_number_scheduled{cluster="CLUSTER", namespace="NAMESPACE", daemonset=DAEMONSET"}

失敗した DaemonSet または停滞している DaemonSet に対してアラートを出すには、次の PromQL 式を使用します。

(
  (
    kube_daemonset_status_number_misscheduled{cluster="CLUSTER", namespace="NAMESPACE", daemonset="DAEMONSET"}
      !=
    0
  ) or (
    kube_daemonset_status_updated_number_scheduled{cluster="CLUSTER", namespace="NAMESPACE", daemonset="DAEMONSET"}
      !=
    kube_daemonset_status_desired_number_scheduled{cluster="CLUSTER", namespace="NAMESPACE", daemonset="DAEMONSET"}
  )
) and (
  changes(kube_daemonset_status_updated_number_scheduled{cluster="CLUSTER", namespace="NAMESPACE", daemonset="DAEMONSET"}[5m])
    ==
  0
)

このセクションのクエリとアラートの式の一部は、GitHub の Prometheus コミュニティ Kubernetes Helm チャート リポジトリの kubernetes-apps.yaml ファイルから使用されています。

HorizontalPodAutoscaler の指標

HorizontalPodAutoscaler(HPA)は、CPU やメモリ使用率などの指標に応じて、ワークロード(Deployment や StatefulSet など)の Pod の数を定期的に変更するコントローラです。ワークロードで使用できる Pod の数を変更すると、ワークロードの応答性を維持しながら効率性を確保できます。

HPA の詳細については、HorizontalPodAutoscaler の詳細表示をご覧ください。

HPA の指標の表

HorizontalPodAutoscaler の指標を使用すると、コントローラの動作のモニタリングとアラートの作成を行うことができます。次の表に、Kube 状態指標パッケージで使用可能な指標を示します。

この表の Cloud Monitoring の指標名には、prometheus.googleapis.com/ という接頭辞を付ける必要があります。この接頭辞は、表中の項目では省略されています。

PromQL の指標名
Cloud Monitoring の指標名
種類、タイプ、単位
モニタリング対象リソース
必要な GKE バージョン
説明
ラベル
kube_horizontalpodautoscaler_spec_max_replicas
kube_horizontalpodautoscaler_spec_max_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
オートスケーラーが設定できる Pod 数の上限(MinReplicas より小さい値にはできません)。30 秒ごとにサンプリングされます。

horizontalpodautoscaler: horizontalpodautoscaler.
kube_horizontalpodautoscaler_spec_min_replicas
kube_horizontalpodautoscaler_spec_min_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
オートスケーラーが設定できる Pod 数の下限(デフォルトは 1)。30 秒ごとにサンプリングされます。

horizontalpodautoscaler: horizontalpodautoscaler.
kube_horizontalpodautoscaler_spec_target_metric
kube_horizontalpodautoscaler_spec_target_metric/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
目的のレプリカ数を計算するときに、このオートスケーラーが使用する指標の仕様。30 秒ごとにサンプリングされます。

horizontalpodautoscaler: horizontalpodautoscaler.
metric_name: metric_name.
metric_target_type: metric_target_type.
kube_horizontalpodautoscaler_status_condition
kube_horizontalpodautoscaler_status_condition/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
このオートスケーラーの条件。30 秒ごとにサンプリングされます。

condition: condition.
horizontalpodautoscaler: horizontalpodautoscaler.
namespace: namespace.
status: status.
kube_horizontalpodautoscaler_status_current_replicas
kube_horizontalpodautoscaler_status_status_current_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
このオートスケーラーによって管理される Pod の現在のレプリカの数。30 秒ごとにサンプリングされます。

horizontalpodautoscaler: horizontalpodautoscaler.
kube_horizontalpodautoscaler_status_desired_replicas
kube_horizontalpodautoscaler_status_desired_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
このオートスケーラーによって管理される Pod の目的のレプリカの数。30 秒ごとにサンプリングされます。

horizontalpodautoscaler: horizontalpodautoscaler.

詳細については、HorizontalPodAutoscaler の指標をご覧ください。

HPA の指標のサンプルクエリ

たとえば、HPA がレプリカの最大数に近づいているかどうかを判断する場合は、次の比率をプロットします。

kube_horizontalpodautoscaler_status_current_replicas{cluster="CLUSTER", namespace="NAMESPACE", horizontalpodautoscaler="HPA"} /
kube_horizontalpodautoscaler_spec_max_replicas{cluster="CLUSTER", namespace="NAMESPACE", horizontalpodautoscaler="HPA"}

最大数のレプリカで HPA を実行している場合は、Pod の最大数の仕様を増やすことをおすすめします。次の PromQL 式を使用すると、このケースを通知するアラートを作成できます。

kube_horizontalpodautoscaler_status_current_replicas{cluster="CLUSTER", namespace="NAMESPACE", horizontalpodautoscaler="HPA"}
  ==
kube_horizontalpodautoscaler_spec_max_replicas{cluster="CLUSTER", namespace="NAMESPACE", horizontalpodautoscaler="HPA"}

kube_horizontalpodautoscaler_status_current_replicaskube_horizontalpodautoscaler_status_desired_replicas の指標の値を比較して、現在のレプリカ数と必要なレプリカ数の間に差異があるかどうかを判断することもできます。この差異は、クラスタ内のリソースの制約を示している可能性があります。次の PromQL 式は、現在のレプリカ数と必要なレプリカ数、最小レプリカ数、最大レプリカ数との差異、現在のレプリカ数の変化を調べます。

(kube_horizontalpodautoscaler_status_desired_replicas{job="kube-state-metrics", namespace=~"NAMESPACE"}
  !=
kube_horizontalpodautoscaler_status_current_replicas{job="kube-state-metrics", namespace=~"NAMESPACE"})
  and
(kube_horizontalpodautoscaler_status_current_replicas{job="kube-state-metrics", namespace=~"NAMESPACE"}
  >
kube_horizontalpodautoscaler_spec_min_replicas{job="kube-state-metrics", namespace=~"NAMESPACE"})
  and
(kube_horizontalpodautoscaler_status_current_replicas{job="kube-state-metrics", namespace=~"NAMESPACE"}
  <
kube_horizontalpodautoscaler_spec_max_replicas{job="kube-state-metrics", namespace=~"NAMESPACE"})
  and
changes(kube_horizontalpodautoscaler_status_current_replicas{job="kube-state-metrics", namespace=~"NAMESPACE"}[15m]) == 0

kube_horizontalpodautoscaler_status_condition 指標の condition ラベルと status ラベルは、HPA がさまざまな障害モードに陥ったタイミングを検出する場合にも役立ちます。次に例を示します。

  • 条件 ScalingLimited とステータス true は、HPA がレプリカの最小数と最大数のいずれかでバインドされていることを示します。
    kube_horizontalpodautoscaler_status_condition{status="true", condition="ScalingLimited"} == 1
  • 条件 AbleToScale とステータス false は、HPA でスケールの取得または更新に関する問題が発生していることを示します。

    kube_horizontalpodautoscaler_status_condition{status="false", condition="AbleToScale"} == 1

  • 条件 ScalingActive とステータス false は、HPA が無効になっているか、新しいスケールを計算できないことを示しています。

    kube_horizontalpodautoscaler_status_condition{status="false", condition="ScalingActive"} == 1

このセクションのクエリとアラートの式の一部は、GitHub の Prometheus コミュニティ Kubernetes Helm チャート リポジトリの kubernetes-apps.yaml ファイルから使用されています。