このドキュメントでは、Google Cloud Managed Service for Prometheus を構成して、Google Kubernetes Engine(GKE)クラスタとワークロードから特定の Kubernetes 指標をフィルタリングして収集する方法について説明します。
次のことに精通している必要があります。
GKE での指標の収集
GKE クラスタのシステム コンポーネントは、Prometheus 指標を出力して公開します。デフォルトでは、すべてのクラスタが GKE 固有のシステム指標を取り込みます。追加の組み込み指標パッケージを使用すると、さまざまなコンポーネントの指標のキュレートされたコレクションを取り込むことができます。
組み込みの GKE 指標パッケージとは別に、特定の Prometheus 指標を取り込むように Google Cloud Managed Service for Prometheus を手動で構成できます。このカスタム構成は、次のようなユースケースに適しています。
- クラスタとワークロード内の特定のシグナルをモニタリングします。
- 不要な指標パッケージを無効にして、指標のサブセットのみを取り込むことで、費用を最適化します。
- コンポーネントによって出力されるものの、指標パッケージに含まれていない指標を収集します。
オペレーターの場合、各ノードの kubelet プロセスによって出力されるノード指標は、特定のシグナルのワークロードとノードのモニタリングに役立ちます。
指標収集カスタム リソース
特定の指標をフィルタして取り込むには、次のいずれかのカスタム リソースで Prometheus の再ラベル付けルールを構成します。
PodMonitoring: 特定の Namespace の Pod からの指標収集を構成します。ClusterPodMonitoring: 任意の Namespace の Pod からの指標収集を構成します。ClusterNodeMonitoring:kubeletや cAdvisor などのノード コンポーネントから指標の収集を構成します。
指標の重複
クラスタのアクティブな指標パッケージにも含まれている指標をフィルタすると、その指標が Google Cloud Managed Service for Prometheus に複数回表示されます。たとえば、クラスタで KUBELET 指標パッケージが有効になっていて、kubelet_running_containers 指標の収集を構成すると、値が重複して表示されます。
重複を避けるため、収集する指標が有効な指標パッケージに含まれていないことを確認します。含まれている指標の詳細については、次の指標パッケージをご覧ください。
始める前に
作業を始める前に、次のタスクが完了していることを確認してください。
- Google Kubernetes Engine API を有効にする。 Google Kubernetes Engine API を有効化
- このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化します。gcloud CLI をインストール済みの場合は、
gcloud components updateコマンドを実行して最新のバージョンを取得します。以前のバージョンの gcloud CLI では、このドキュメントのコマンドを実行できない場合があります。
- このドキュメントに必要な権限があることを確認します。
- 既存の GKE クラスタを使用するか、新しいクラスタを作成します。
必要なロール
指標の収集と表示に必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
-
クラスタに Kubernetes リソースを作成する: Kubernetes Engine 開発者 (
roles/container.developer) -
Monitoring で指標を表示する: モニタリング閲覧者 (
roles/monitoring.viewer)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
Google Cloud Managed Service for Prometheus を有効にする
Google Cloud Managed Service for Prometheus は、すべての GKE クラスタでデフォルトで有効になっています。Autopilot クラスタでは無効にできません。Autopilot クラスタを使用している場合は、指標の収集を構成するセクションに進みます。
Standard クラスタで Google Cloud Managed Service for Prometheus が有効になっていることを確認するには、次のいずれかのオプションを選択します。
コンソール
Google Cloud コンソールで [Kubernetes クラスタ] ページに移動します。
確認するクラスタの行で、 [アクション] > [編集] をクリックします。[クラスタの詳細] ページが開きます。
[機能] セクションで、[Managed Service for Prometheus] フィールドの値を確認します。値が [有効] の場合は、指標の収集を構成するセクションに進みます。値が Disabled の場合は、Google Cloud Managed Service for Prometheus を有効にします。
- [Managed Service for Prometheus を編集] をクリックします。[Managed Service for Prometheus の編集] ダイアログが開きます。
- [Managed Service for Prometheus] チェックボックスをオンにします。
- [変更を保存] をクリックします。
gcloud
クラスタで Google Cloud Managed Service for Prometheus が有効になっているかどうかを確認します。
gcloud container clusters describe CLUSTER_NAME \
--location=CONTROL_PLANE_LOCATION \
--format='value(monitoringConfig.managedPrometheusConfig.enabled)'
次のように置き換えます。
CLUSTER_NAME: Standard クラスタの名前。CONTROL_PLANE_LOCATION: クラスタ コントロール プレーンのリージョンまたはゾーン(例:us-central1、us-central1-a)。
出力が True の場合、Google Cloud Managed Service for Prometheus は有効になっています。出力が False の場合は、Google Cloud Managed Service for Prometheus を有効にします。
gcloud container clusters update CLUSTER_NAME \
--location=CONTROL_PLANE_LOCATION \
--enable-managed-prometheus
指標の収集を構成する
特定の出力指標を取り込むように Google Cloud Managed Service for Prometheus を構成するには、指標に関する次の情報が必要です。
- 指標名(
kubelet_working_podsなど)。 - 指標を公開するエンドポイント(
/metrics/cadvisor、/metricsなど)。
指標を検索して収集を構成する手順は次のとおりです。
特定のコンポーネントのリファレンス ドキュメントで指標を見つけます。たとえば、次のリソースを使用してノード指標を検索できます。
クラスタのアクティブな指標パッケージを確認します。
gcloud container clusters describe CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --flatten=monitoringConfig.componentConfig \ --format='value(enableComponents)'出力は次のようになります。
SYSTEM_COMPONENTS;STORAGE;POD;DEPLOYMENT;STATEFULSET;DAEMONSET;HPA;JOBSET;CADVISOR;KUBELET;DCGM収集する指標がこれらのアクティブなパッケージのいずれかに含まれているかどうかを、利用可能な指標の情報を使用して確認します。指標が有効な指標パッケージに含まれている場合、重複する指標が Monitoring に表示されることがあります。指標がアクティブな指標パッケージに含まれていない場合は、次のステップに進みます。
省略可: 指標が指標エンドポイントで使用可能であることを確認するには、
kubectl get --rawコマンドを使用してエンドポイントをクエリします。たとえば、次のコマンドは/metricsエンドポイントに対してkubelet_working_pods指標のクエリを実行します。kubectl get --raw "/api/v1/nodes/NODE_NAME/proxy/metrics" | grep "kubelet_working_pods"NODE_NAMEは、クエリするノードの名前に置き換えます。出力は次のようになります。これは、指標が使用可能であることを示しています。
# HELP kubelet_working_pods [ALPHA] Number of pods the kubelet is actually running, broken down by lifecycle phase, whether the pod is desired, orphaned, or runtime only (also orphaned), and whether the pod is static. An orphaned pod has been removed from local configuration or force deleted in the API and consumes resources that are not otherwise visible. # TYPE kubelet_working_pods gauge kubelet_working_pods{config="desired",lifecycle="sync",static=""} 8 kubelet_working_pods{config="desired",lifecycle="sync",static="true"} 1 kubelet_working_pods{config="desired",lifecycle="terminated",static=""} 0 kubelet_working_pods{config="desired",lifecycle="terminated",static="true"} 0 kubelet_working_pods{config="desired",lifecycle="terminating",static=""} 0 kubelet_working_pods{config="desired",lifecycle="terminating",static="true"} 0収集する指標を特定したら、PodMonitoring、ClusterPodMonitoring、または ClusterNodeMonitoring カスタム リソースで Prometheus のラベル付けルールの再設定を使用して、その指標をフィルタします。使用するカスタム リソースは、指標収集のカスタム リソース セクションで説明されているように、指標のプロパティによって異なります。
たとえば、次の ClusterNodeMonitoring マニフェストを確認します。
apiVersion: monitoring.googleapis.com/v1 kind: ClusterNodeMonitoring metadata: name: kubelet-pod-counts spec: selector: matchLabels: {} endpoints: - path: "/metrics" scheme: "https" interval: "30s" tls: insecureSkipVerify: true # metricRelabeling specifies the metrics to ingest. The metrics must be # available at the specified endpoint. metricRelabeling: - action: keep sourceLabels: [__name__] regex: kubelet_(active|working)_podsこのマニフェストには次のプロパティがあります。
selector.matchLabelsフィールドは空のセット({})で、すべてのノードと一致します。endpoints.pathフィールドは、スクレイピングする指標エンドポイントを識別します。metricRelabelingフィールドは、収集する特定の指標を識別します。この例では、Google Cloud Managed Service for Prometheus は、エンドポイントからkubelet_active_podsとkubelet_working_podsという名前の指標を収集します。
カスタム リソースをデプロイすると、Google Cloud Managed Service for Prometheus は、指定した構成に一致する指標を取り込みます。これらの指標は、Cloud Monitoring などの他の指標と同じ方法で表示してクエリできます。
指標の収集を確認する
次の手順では、kubelet から kubelet_runtime_operations_errors_total 指標を収集するように Google Cloud Managed Service for Prometheus を構成する方法について説明します。次の手順では、指標が現在収集されていないことを確認し、ClusterNodeMonitoring を作成(kubelet はノード コンポーネントであるため)してから、指標が Monitoring に表示されることを確認します。
kubelet_runtime_operations_errors_total指標が Monitoring にまだ存在しないことを確認します。Google Cloud コンソールで、Metrics Explorer のページに移動します。
[クエリ] セクションの [指標] フィールドで、
prometheus/kubelet_runtime_operations_errors_total/counter指標を選択します。検索結果が表示されない場合は、指標が収集されていません。
kubelet_runtime_operations_errors_total指標をフィルタする ClusterNodeMonitoring を作成します。次の ClusterNodeMonitoring マニフェストを
kubelet-runtime-errors-collector.yamlとして保存します。apiVersion: monitoring.googleapis.com/v1 kind: ClusterNodeMonitoring metadata: name: kubelet-runtime-errors-collector spec: selector: matchLabels: {} endpoints: - path: /metrics scheme: https interval: 30s tls: insecureSkipVerify: true metricRelabeling: - action: keep sourceLabels: [__name__] regex: kubelet_runtime_operations_errors_totalClusterNodeMonitoring を作成します。
kubectl apply -f kubelet-runtime-errors-collector.yaml
指標が Monitoring に表示されるまでに、最大 10 分ほどかかることがあります。
Google Cloud コンソールで、指標が Monitoring に表示されていることを確認します。
[Metrics Explorer] ページに移動します。
[クエリ] セクションの [指標] フィールドで、
prometheus/kubelet_runtime_operations_errors_total/counter指標を選択します。省略可: [フィルタ] プルダウン メニューでクラスタを選択します。
[結果] セクションに、収集された指標を含むグラフが表示されます。