このドキュメントでは、マネージド コレクションを使用して Google Cloud Managed Service for Prometheus を設定する方法について説明します。この設定は取り込みの最小例で、サンプル アプリケーションをモニタリングし、収集された指標を Monarch に保存する Prometheus の Deployment を使用します。
このドキュメントでは、次の方法について説明します。
- 環境とコマンドライン ツールを設定する。
- クラスタのマネージド コレクションを設定する。
- ターゲットの取得と指標の取り込み用のリソースを構成する。
- 既存の prometheus-operator カスタム リソースを移行する。
コレクタのデプロイ、スケーリング、シャーディング、構成、メンテナンスなどの複雑さが軽減されるまで、マネージド コレクションを使用することをおすすめします。マネージド コレクションは、GKE と他のすべての Kubernetes 環境でサポートされています。
マネージド コレクションは、Prometheus ベースのコレクタを Daemonset として実行し、同じ場所に配置されたノード上のターゲットをスクレイピングすることだけでスケーラビリティを保証します。軽量のカスタム リソースを持つコレクタを、pull コレクションを使用してエクスポータをスクレイピングするように構成してから、コレクタがスクレイピングしたデータを中央のデータストアの Monarch に push します。Google Cloud がクラスタに直接アクセスして指標データを pull したり、スクレイピングすることは決してありません。コレクタが Google Cloud にデータを push します。マネージド デプロイとセルフデプロイによるデータ収集の詳細については、Managed Service for Prometheus を使用したデータ収集とマネージド コレクションとセルフデプロイ コレクションを使用した取り込みとクエリをご覧ください。
始める前に
このセクションでは、このドキュメントで説明するタスクに必要な構成について説明します。
プロジェクトとツールを設定する
Google Cloud Managed Service for Prometheus を使用するには、次のリソースが必要です。
Cloud Monitoring API が有効になっている Google Cloud プロジェクト。
Google Cloud プロジェクトが存在しない場合は、以下の操作を行います。
Google Cloud コンソールで [新しいプロジェクト] に移動します。
[プロジェクト名] フィールドにプロジェクトの名前を入力して、[作成] をクリックします。
[お支払い] に移動します。
作成したプロジェクトをまだ選択していない場合は、ページ上部でプロジェクトを選択します。
既存のお支払いプロファイルを選択するか、新しいお支払いプロファイルを作成するように求められます。
新しいプロジェクトでは、Monitoring API がデフォルトで有効になっています。
Google Cloud プロジェクトがすでに存在する場合は、Monitoring API が有効になっていることを確認します。
[API とサービス] に移動します。
プロジェクトを選択します。
[API とサービスの有効化] をクリックします。
「Monitoring」を検索します。
検索結果で、[Cloud Monitoring API] をクリックします。
[API が有効です] と表示されていない場合は、[有効にする] をクリックします。
Kubernetes クラスタ。Kubernetes クラスタがない場合は、GKE のクイックスタートの手順を行います。
また、次のコマンドライン ツールも必要です。
gcloud
kubectl
gcloud
ツールと kubectl
ツールは Google Cloud CLI に含まれています。インストールの詳細については、Google Cloud CLI コンポーネントの管理をご覧ください。インストールされている gcloud CLI コンポーネントを確認するには、次のコマンドを実行します。
gcloud components list
環境を構成する
プロジェクト ID またはクラスタ名を繰り返し入力しないようにするには、次の構成を行います。
コマンドライン ツールを次のように構成します。
Google Cloud プロジェクトの ID を参照するように gcloud CLI を構成します。
gcloud config set project PROJECT_ID
クラスタを使用するように
kubectl
CLI を構成します。kubectl config set-cluster CLUSTER_NAME
これらのツールの詳細については、以下をご覧ください。
名前空間を設定する
サンプル アプリケーションの一部として作成するリソースに NAMESPACE_NAME
Kubernetes Namespace を作成します。
kubectl create ns NAMESPACE_NAME
マネージド コレクションを設定する
マネージド コレクションは、GKE クラスタと GKE 以外の Kubernetes クラスタの両方で使用できます。
マネージド コレクションを有効にすると、クラスタ内コンポーネントが実行されますが、指標はまだ生成されません。PodMonitoring リソースや ClusterPodMonitoring リソースは、これらのコンポーネントで指標エンドポイントを正しく取得するために必要です。これらのリソースを有効な指標エンドポイントとともにデプロイするか、GKE に組み込まれている Kube 状態指標などのマネージド指標パッケージのいずれかを有効にする必要があります。トラブルシューティングについては、取り込み側の問題をご覧ください。
マネージド モードでの収集を有効にすると、クラスタに次のコンポーネントがインストールされます。
gmp-operator
Deployment。Managed Service for Prometheus の Kubernetes オペレーターをデプロイします。rule-evaluator
Deployment。アラートルールと記録ルールの構成と実行に使用します。collector
DaemonSet。各コレクタと同じノードで実行されている Pod からの指標のみを取得し、コレクションを水平にスケーリングします。alertmanager
StatefulSet。トリガーされたアラートを推奨通知チャネルに送信するように構成されます。
Managed Service for Prometheus に関するリファレンス ドキュメントについては、マニフェスト ページをご覧ください。
マネージド コレクションを有効にする: GKE
マネージド コレクションは、次のものに対してデフォルトで有効になっています。
GKE バージョン 1.25 以降を実行している GKE Autopilot クラスタ。
GKE バージョン 1.27 以降を実行している GKE Standard クラスタ。このデフォルトは、クラスタの作成時にオーバーライドできます。マネージド コレクションを無効にするをご覧ください。
マネージド コレクションをデフォルトで有効にしない GKE 環境で実行している場合は、マネージド コレクションを手動で有効にするをご覧ください。
クラスタ内コンポーネント バージョンが新しくリリースされると、GKE のマネージド コレクションが自動的にアップグレードされます。
GKE のマネージド モードでの収集では、デフォルトの Compute Engine サービス アカウントに付与されている権限を使用します。デフォルトのノードサービス アカウントの標準権限を変更するポリシーがある場合、続行するには Monitoring Metric Writer
ロールの追加が必要になることがあります。
マネージド コレクションを手動で有効にする
デフォルトでマネージド コレクションが有効になっていない GKE 環境で実行している場合は、次の方法でマネージド コレクションを有効にできます。
- Cloud Monitoring の GKE クラスタ ダッシュボード。
- Google Cloud コンソールで [Kubernetes Engine] ページにアクセスします。
- Google Cloud CLI。gcloud CLI を使用するには、GKE バージョン 1.21.4-gke.300 以降を実行する必要があります。
Google Kubernetes Engine 向けの Terraform。Terraform を使用して Managed Service for Prometheus を有効にするには、GKE バージョン 1.21.4-gke.300 以降を実行する必要があります。
GKE クラスタ ダッシュボード
Cloud Monitoring の GKE クラスタ ダッシュボードを使用すると、次のことができます。
- クラスタで Managed Service for Prometheus が有効になっているかどうかを確認します。また、マネージド コレクションまたは自分でデプロイしたコレクションのどちらを使用しているかを確認します。
- プロジェクトのクラスタでマネージド コレクションを有効にします。
- クラスタに関するその他の情報を表示します。
GKE クラスタ ダッシュボードを表示する方法は次のとおりです。
-
Google Cloud コンソールのナビゲーション パネルで、[Monitoring] を選択してから、[ダッシュボード] を選択します。
[GCP] ダッシュボード カテゴリを選択し、[GKE クラスタ] を選択します。
GKE クラスタ ダッシュボードを使用して 1 つ以上の GKE クラスタでマネージド コレクションを有効にするには、次の操作を行います。
マネージド コレクションを有効にする GKE クラスタごとにチェックボックスをオンにします。
[選択項目を有効化します] を選択します。
Kubernetes Engine UI
Google Cloud コンソールを使用して、次のことができます。
- 既存の GKE クラスタでマネージド コレクションを有効にする。
- マネージド コレクションが有効な新しい GKE クラスタを作成する。
既存のクラスタを更新するには、次の操作を行います。
-
Google Cloud コンソールのナビゲーション パネルで [Kubernetes Engine] を選択して、[クラスタ] を選択します。
クラスタの名前をクリックします。
[機能] リストで、[Prometheus 向けのマネージド サービス] オプションを見つけます。無効と表示されている場合は、[edit編集] をクリックし、[Prometheus 向けのマネージド サービスの有効化] を選択します。
[変更を保存] をクリックします。
マネージド コレクションが有効なクラスタを作成するには、次の操作を行います。
-
Google Cloud コンソールのナビゲーション パネルで [Kubernetes Engine] を選択して、[クラスタ] を選択します。
[作成] をクリックします。
[Standard] オプションの [構成] をクリックします。
ナビゲーション パネルで [特徴量] をクリックします。
[オペレーション] セクションで、[Prometheus 向けのマネージド サービスの有効化] を選択します。
[保存] をクリックします。
gcloud CLI
gcloud CLI を使用して、次のことができます。
- 既存の GKE クラスタでマネージド コレクションを有効にする。
- マネージド コレクションが有効な新しい GKE クラスタを作成する。
これらのコマンドが完了するまでに、最長で 5 分ほどかかる場合があります。
まず、プロジェクトを設定します。
gcloud config set project PROJECT_ID
既存のクラスタを更新するには、クラスタがゾーンかリージョンかに応じて、次のいずれかの update
コマンドを実行します。
gcloud container clusters update CLUSTER_NAME --enable-managed-prometheus --zone ZONE
gcloud container clusters update CLUSTER_NAME --enable-managed-prometheus --region REGION
マネージド コレクションが有効なクラスタを作成するには、次のコマンドを実行します。
gcloud container clusters create CLUSTER_NAME --zone ZONE --enable-managed-prometheus
GKE Autopilot
GKE バージョン 1.25 以降を実行している GKE Autopilot クラスタでは、マネージド コレクションがデフォルトでオンになっています。マネージド コレクションをオフにすることはできません。
1.25 へのアップグレード時にクラスタでマネージド コレクションの有効化に失敗した場合は、gcloud CLI セクションの update コマンドを実行して、手動で有効にできます。
Terraform
Terraform を使用してマネージド コレクションを構成する手順については、google_container_cluster
の Terraform レジストリをご覧ください。
Terraform と Google Cloud を使用する場合の一般的な情報については、Google Cloud での Terraform をご覧ください。
マネージド コレクションを無効にする
クラスタでマネージド コレクションを無効にするには、次のいずれかの方法を使用します。
Kubernetes Engine UI
Google Cloud コンソールを使用して、次のことができます。
- 既存の GKE クラスタでマネージド コレクションを無効にする。
- GKE バージョン 1.27 以降を実行する新しい GKE Standard クラスタを作成するときに、マネージド コレクションの自動有効化をオーバーライドします。
既存のクラスタを更新するには、次の操作を行います。
-
Google Cloud コンソールのナビゲーション パネルで [Kubernetes Engine] を選択して、[クラスタ] を選択します。
クラスタの名前をクリックします。
[機能] セクションで、[Managed Service for Prometheus] オプションを見つけます。edit [編集] をクリックして [Managed Service for Prometheus の有効化] をオフにします。
[変更を保存] をクリックします。
新しい GKE Standard クラスタ(バージョン 1.27 以降)の作成時にマネージド コレクションの自動有効化をオーバーライドするには、次の操作を行います。
-
Google Cloud コンソールのナビゲーション パネルで [Kubernetes Engine] を選択して、[クラスタ] を選択します。
[作成] をクリックします。
[Standard] オプションの [構成] をクリックします。
ナビゲーション パネルで [機能] をクリックします。
[オペレーション] セクションで、[Managed Service for Prometheus の有効化] を選択します。
[保存] をクリックします。
gcloud CLI
gcloud CLI を使用して、次のことができます。
- 既存の GKE クラスタでマネージド コレクションを無効にする。
- GKE バージョン 1.27 以降を実行する新しい GKE Standard クラスタを作成するときに、マネージド コレクションの自動有効化をオーバーライドします。
これらのコマンドが完了するまでに、最長で 5 分ほどかかる場合があります。
まず、プロジェクトを設定します。
gcloud config set project PROJECT_ID
既存のクラスタでマネージド コレクションを無効にするには、クラスタがゾーンかリージョンかに応じて、次のいずれかの update
コマンドを実行します。
gcloud container clusters update CLUSTER_NAME --disable-managed-prometheus --zone ZONE
gcloud container clusters update CLUSTER_NAME --disable-managed-prometheus --region REGION
新しい GKE Standard クラスタ(バージョン 1.27 以降)の作成時にマネージド コレクションの自動有効化をオーバーライドするには、次のコマンドを実行します。
gcloud container clusters create CLUSTER_NAME --zone ZONE --no-enable-managed-prometheus
GKE Autopilot
GKE バージョン 1.25 以降を実行している GKE Autopilot クラスタでは、マネージド コレクションをオフにすることはできません。
Terraform
マネージド コレクションを無効にするには、managed_prometheus
構成ブロックの enabled
属性を false
に設定します。この構成ブロックの詳細については、google_container_cluster
の Terraform レジストリをご覧ください。
Terraform と Google Cloud を使用する場合の一般的な情報については、Google Cloud での Terraform をご覧ください。
マネージド コレクションを有効にする: GKE 以外の Kubernetes
GKE 以外の環境で実行している場合は、次の方法でマネージド コレクションを有効にできます。
kubectl
CLI。バージョン 1.12 以降を実行する GKE Enterprise デプロイに含まれるバンドル ソリューション。
kubectl
CLI
GKE 以外の Kubernetes クラスタを使用している場合にマネージド コレクタをインストールするには、次のコマンドを実行して Setup マニフェストと Operator マニフェストをインストールします。
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.10.0/manifests/setup.yaml kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.10.0/manifests/operator.yaml
GKE Enterprise
GKE Enterprise クラスタのマネージド コレクションの構成については、ご使用のディストリビューションのドキュメントをご覧ください。
サンプル アプリケーションをデプロイする
このサンプル アプリケーションでは、metrics
ポートに example_requests_total
カウンタ指標と example_random_numbers
ヒストグラム指標が出力されます。アプリケーションのマニフェストでは 3 つのレプリカを定義しています。
サンプル アプリケーションをデプロイするには、次のコマンドを実行します。
kubectl -n NAMESPACE_NAME apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.10.0/examples/example-app.yaml
PodMonitoring リソースを構成する
サンプル アプリケーションによって出力された指標データを取り込むために、Managed Service for Prometheus はターゲットのスクレイピングを使用します。ターゲットのスクレイピングと指標の取り込みは、Kubernetes のカスタム リソースを使用して構成されます。マネージド サービスは、PodMonitoring カスタム リソース(CR)を使用します。
PodMonitoring CR は、CR がデプロイされている名前空間のターゲットのみをスクレイピングします。複数の名前空間でターゲットをスクレイピングするには、各名前空間に同じ PodMonitoring CR をデプロイします。kubectl get podmonitoring -A
を実行すると、目的の Namespace に PodMonitoring リソースがインストールされていることを確認できます。
すべての Managed Service for Prometheus CR のリファレンス ドキュメントについては、prometheus-engine/doc/api のリファレンスをご覧ください。
次のマニフェストでは、NAMESPACE_NAME
Namespace で PodMonitoring リソース prom-example
を定義します。このリソースでは、Kubernetes ラベルセレクタを使用して、ラベルが app.kubernetes.io/name
で値が prom-example
の Namespace のすべての Pod を検索します。一致する Pod が 30 秒ごとに、/metrics
HTTP パスの metrics
というポートでスクレイピングされます。
apiVersion: monitoring.googleapis.com/v1 kind: PodMonitoring metadata: name: prom-example spec: selector: matchLabels: app.kubernetes.io/name: prom-example endpoints: - port: metrics interval: 30s
このリソースを適用するには、次のコマンドを実行します。
kubectl -n NAMESPACE_NAME apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.10.0/examples/pod-monitoring.yaml
マネージド コレクタが一致する Pod をスクレイピングしています。スクレイピング ターゲットのステータスを表示するには、ターゲット ステータス機能を有効にします。
すべての Namespace にわたって Pod の範囲に適用される水平コレクションを構成するには、ClusterPodMonitoring リソースを使用します。ClusterPodMonitoring リソースは、PodMonitoring リソースと同じインターフェースを提供しますが、検出された Pod を特定の名前空間に制限しません。
GKE で実行している場合は、次の操作を行います。
- Cloud Monitoring で PromQL を使用してサンプル アプリケーションによって取り込まれた指標をクエリするには、Cloud Monitoring を使用したクエリをご覧ください。
- Grafana を使用してサンプル アプリケーションによって取り込まれた指標をクエリするには、Grafana または Prometheus API コンシューマーを使用したクエリをご覧ください。
- エクスポートされた指標のフィルタリングと prom-operator リソースの調整については、マネージド コレクションに関するその他のトピックをご覧ください。
GKE の外部で実行する場合は、次のセクションで説明するように、サービス アカウントを作成して指標データの書き込みを承認する必要があります。
認証情報を明示的に提供する
GKE で実行する場合、情報を収集する Prometheus サーバーは、ノードのサービス アカウントに基づいて環境から認証情報を自動的に取得します。GKE 以外の Kubernetes クラスタでは、gmp-public Namespace 内の OperatorConfig リソースによって認証情報を明示的に提供する必要があります。
コンテキストをターゲット プロジェクトに設定します。
gcloud config set project PROJECT_ID
サービス アカウントの作成:
gcloud iam service-accounts create gmp-test-sa
サービス アカウントに必要な権限を付与します。
gcloud projects add-iam-policy-binding PROJECT_ID\ --member=serviceAccount:gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/monitoring.metricWriter
サービス アカウント キーを作成してダウンロードします。
gcloud iam service-accounts keys create gmp-test-sa-key.json \ --iam-account=gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com
鍵ファイルを Secret として GKE 以外のクラスタに追加します。
kubectl -n gmp-public create secret generic gmp-test-sa \ --from-file=key.json=gmp-test-sa-key.json
OperatorConfig リソースを開いて編集します。
kubectl -n gmp-public edit operatorconfig config
太字で示されているテキストをリソースに追加します。
マネージド ルールの評価が機能するように、これらの認証情報をapiVersion: monitoring.googleapis.com/v1 kind: OperatorConfig metadata: namespace: gmp-public name: config collection: credentials: name: gmp-test-sa key: key.json
rules
セクションに追加します。ファイルを保存して、エディタを閉じます。変更が適用されると、Pod が再作成され、指定されたサービス アカウントで指標のバックエンドに対する認証が開始します。
マネージド コレクションに関するその他のトピック
このセクションでは、次の操作を行う方法について説明します。
- ターゲット ステータス機能を有効にして、デバッグを容易にする。
- Terraform を使用してターゲットのスクレイピングを構成する。
- マネージド サービスにエクスポートするデータをフィルタする。
- Kubelet と cAdvisor の指標をスクレイピングする。
- マネージド サービスで使用できるように既存の prom-operator リソースを変換する。
- GKE の外部でマネージド コレクションを実行する。
ターゲット ステータス機能の有効化
次のように、OperatorConfig リソース内の
features.targetStatus.enabled
値をtrue
に設定すると、PodMonitoring リソースまたは ClusterPodMonitoring リソース内のターゲットのステータスを確認できます。apiVersion: monitoring.googleapis.com/v1 kind: OperatorConfig metadata: namespace: gmp-public name: config features: targetStatus: enabled: true
構成されている場合、数秒後にすべての有効な PodMonitoring リソースまたは ClusterPodMonitoring リソースに
Status.Endpoint Statuses
フィールドが表示されます。NAMESPACE_NAME
Namespace にprom-example
という名前の PodMonitoring リソースがある場合は、次のコマンドを実行してステータスを確認できます。kubectl -n NAMESPACE_NAME describe podmonitorings/prom-example
出力は次のようになります。
API Version: monitoring.googleapis.com/v1 Kind: PodMonitoring ... Status: Conditions: ... Status: True Type: ConfigurationCreateSuccess Endpoint Statuses: Active Targets: 3 Collectors Fraction: 1 Last Update Time: 2023-08-02T12:24:26Z Name: PodMonitoring/custom/prom-example/metrics Sample Groups: Count: 3 Sample Targets: Health: up Labels: Cluster: CLUSTER_NAME Container: prom-example Instance: prom-example-589ddf7f7f-hcnpt:metrics Job: prom-example Location: REGION Namespace: NAMESPACE_NAME Pod: prom-example-589ddf7f7f-hcnpt project_id: PROJECT_ID Last Scrape Duration Seconds: 0.020206416 Health: up Labels: ... Last Scrape Duration Seconds: 0.054189485 Health: up Labels: ... Last Scrape Duration Seconds: 0.006224887
出力には次のステータス フィールドが含まれます。
Status.Conditions.Status
は、Managed Service for Prometheus が PodMonitoring または ClusterPodMonitoring に応答して処理する場合、true になります。Status.Endpoint Statuses.Active Targets
は、この PodMonitoring リソースのすべてのコレクタで Managed Service for Prometheus がカウントするスクレイピング ターゲットの数を示します。サンプル アプリケーションでは、prom-example
Deployment に 1 つの指標ターゲットを持つ 3 つのレプリカがあるため、値は3
になります。異常なターゲットがある場合は、Status.Endpoint Statuses.Unhealthy Targets
フィールドが表示されます。Status.Endpoint Statuses.Collectors Fraction
は、Managed Service for Prometheus からすべてのマネージド コレクタに到達可能な場合、1
の値を示します(この値は 100% を意味します)。Status.Endpoint Statuses.Last Update Time
は、最終更新時刻を表示します。最終更新時刻が目的の収集間隔よりも大幅に長い場合は、ターゲットまたはクラスタに問題がある可能性があります。Status.Endpoint Statuses.Sample Groups
フィールドには、コレクタによって挿入された共通のターゲット ラベルでグループ化されたサンプル ターゲットが示されます。この値は、ターゲットが検出されない状況でのデバッグに役立ちます。すべてのターゲットが正常で、収集されている場合、Health
フィールドの期待値はup
です。Last Scrape Duration Seconds
フィールドの値は一般的なターゲットの通常の期間です。
これらのフィールドの詳細については、Managed Service for Prometheus API のドキュメントをご覧ください。
次のいずれかは、構成に問題があることを示しています。
- PodMonitoring リソースに
Status.Endpoint Statuses
フィールドがない。 Last Scrape Duration Seconds
フィールドの値が古すぎる。- ターゲットが少なすぎる。
Health
フィールドの値が、ターゲットがdown
であることを示している。
ターゲット検出の問題をデバッグする方法については、トラブルシューティング ドキュメントの取り込み側の問題をご覧ください。
Terraform を使用したターゲット スクレイピングの構成
kubernetes_manifest
Terraform リソースタイプまたはkubectl_manifest
Terraform リソースタイプ(任意のカスタム リソースが指定できるほう)を使用して、PodMonitoring リソースと ClusterPodMonitoring リソースを自動的に作成し、管理できます。Terraform と Google Cloud を使用する場合の一般的な情報については、Google Cloud での Terraform をご覧ください。
エクスポートした指標をフィルタする
大量のデータを収集する場合は、費用を抑えるため、一部の時系列が Managed Service for Prometheus に送信されないようにする必要があります。これを行うには、Prometheus のラベル変更ルールで、許可リストの
keep
アクションまたは拒否リストのdrop
アクションを使用します。マネージド コレクションの場合、このルールは PodMonitoring または ClusterPodMonitoring リソースのmetricRelabeling
セクションにあります。たとえば、次の指標のラベル変更ルールは、
foo_bar_
、foo_baz_
、またはfoo_qux_
で始まる指標を除外します。metricRelabeling: - action: drop regex: foo_(bar|baz|qux)_.+ sourceLabels: [__name__]
Cloud Monitoring の [指標の管理] ページでは、オブザーバビリティに影響を与えることなく、課金対象の指標に費やす金額を制御するのに役立つ情報が提供されます。[指標の管理] ページには、次の情報が表示されます。
- 指標ドメイン全体と個々の指標での、バイトベースとサンプルベースの両方の課金に対する取り込み量。
- 指標のラベルとカーディナリティに関するデータ。
- アラート ポリシーとカスタム ダッシュボードでの指標の使用。
- 指標書き込みエラーの割合。
費用を減らす方法については、費用管理とアトリビューションをご覧ください。
Kubelet と cAdvisor の指標のスクレイピング
Kubelet は、それ自体に関する指標と、ノード上で実行されているコンテナに関する cAdvisor の指標を公開します。OperatorConfig リソースを編集することで、Kubelet と cAdvisor の指標を取得するようにマネージド コレクションを構成できます。手順については、Kubelet と cAdvisor のエクスポータのドキュメントをご覧ください。
既存の prometheus-operator リソースを変換する
通常は、既存の prometheus-operator リソースを Prometheus 向けのマネージド サービスのマネージド コレクションの PodMonitoring リソースと ClusterPodMonitoring リソースに変換できます。
たとえば、ServiceMonitor リソースは、一連のサービスのモニタリングを定義します。PodMonitoring リソースは、ServiceMonitor リソースによって提供されるフィールドのサブセットを処理します。次の表のようにフィールドをマッピングすることで、ServiceMonitor CR を PodMonitoring CR に変換できます。
monitoring.coreos.com/v1
ServiceMonitor互換性
monitoring.googleapis.com/v1
PodMonitoring.ServiceMonitorSpec.Selector
同一 .PodMonitoringSpec.Selector
.ServiceMonitorSpec.Endpoints[]
.TargetPort
は次にマッピングされます。.Port
.Path
: compatible
.Interval
: compatible
.Timeout
: compatible.PodMonitoringSpec.Endpoints[]
.ServiceMonitorSpec.TargetLabels
PodMonitor には以下を指定する必要があります。
.FromPod[].From
Pod ラベル
.FromPod[].To
ターゲット ラベル.PodMonitoringSpec.TargetLabels
以下に、ServiceMonitor の CR の例を示します。太字の部分は変換で置き換えられ、斜体の部分は直接マッピングされます。
apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: example-app spec: selector: matchLabels: app: example-app endpoints: - targetPort: web path: /stats interval: 30s targetLabels: - foo
類似 PodMonitoring の CR は、サービスとその Pod に
app=example-app
ラベルが付いていることを前提としています。この前提を満たしていない場合は、基盤となる Service リソースのラベルセレクタを使用する必要があります。太字の部分が変換で置き換えられました。
apiVersion: monitoring.googleapis.com/v1 kind: PodMonitoring metadata: name: example-app spec: selector: matchLabels: app: example-app endpoints: - port: web path: /stats interval: 30s targetLabels: fromPod: - from: foo # pod label from example-app Service pods. to: foo
マネージド コレクタの代わりにセルフデプロイ コレクタを使用すると、既存の prometheus-operator のリソースとデプロイ構成ファイルをいつでも使用できます。両方のコレクタタイプから送信される指標のクエリを実行できるため、既存の Prometheus デプロイにはセルフデプロイ コレクタを使用し、新しい Prometheus デプロイにはマネージド コレクタを使用できます。
予約済みラベル
Managed Service for Prometheus は、収集されたすべての指標に自動的に次のラベルを追加します。
project_id
: 指標に関連付けられた Google Cloud プロジェクトの ID。location
: データが保存される物理的な場所(Google Cloud リージョン)。通常、この値は GKE クラスタのリージョンです。AWS またはオンプレミス デプロイメントからデータが収集される場合、値は最も近い Google Cloud のリージョンになります。cluster
: 指標に関連付けられた Kubernetes クラスタの名前。namespace
: 指標に関連付けられた Kubernetes Namespace の名前。job
: Prometheus ターゲットのジョブラベル(既知の場合)。ルール評価の結果で空の場合もあります。instance
: Prometheus ターゲットのインスタンス ラベル(既知の場合)。ルール評価の結果で空の場合もあります。
Google Kubernetes Engine で実行する場合はおすすめしませんが、
project_id
、location
、cluster
ラベルをオーバーライドするには、operator.yaml
内の Deployment リソースに、これらをargs
として追加します。予約済みラベルを指標ラベルとして使用する場合、Managed Service for Prometheus は、接頭辞exported_
を追加して自動的に再度ラベル付けを行います。この動作は、アップストリーム Prometheus が予約済みラベルとの競合を処理する方法と一致します。破棄
gcloud
または GKE UI を使用してデプロイされたマネージド コレクションを無効にするには、次のいずれかを行います。次のコマンドを実行します。
gcloud container clusters update CLUSTER_NAME --disable-managed-prometheus
GKE UI を使用します。
Google Cloud コンソールで [Kubernetes Engine] を選択して、[クラスタ] を選択します。
マネージド コレクションを無効にするクラスタを見つけて、その名前をクリックします。
[詳細] タブの [機能] までスクロールし、編集ボタンを使用して状態を [無効] に変更します。
Terraform を使用してデプロイされたマネージド コレクションを無効にするには、
google_container_cluster
リソースのmanaged_prometheus
セクションでenabled = false
を指定します。kubectl
を使用してデプロイされたマネージド コレクションを無効にするには、次のコマンドを実行します。kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.10.0/manifests/operator.yaml
マネージド コレクションを無効にすると、クラスタは Managed Service for Prometheus への新しいデータの送信を停止します。この操作を行っても、システムにすでに保存されている既存の指標データは削除されません。
マネージド コレクションを無効にすると、
gmp-public
名前空間と、その名前空間内のすべてのリソース(その名前空間にインストールされているエクスポータを含む)が削除されます。GKE の外部でマネージド コレクションを実行する
GKE 環境では、さらに構成を行うことなく、マネージド コレクションを実行できます。他の Kubernetes 環境では、認証情報、指標を格納する
project-id
値、指標が保存されるlocation
値(Google Cloud リージョン)、コレクタが実行されているクラスタの名前を保存するcluster
の値を明示的に指定する必要があります。gcloud
は Google Cloud 環境の外部では機能しないため、代わりに kubectl を使用してデプロイする必要があります。gcloud
とは異なり、kubectl
を使用してマネージド コレクションをデプロイしても、新しいバージョンが利用可能になったときに、クラスタが自動的にアップグレードされません。リリースページで新しいバージョンを確認し、新しいバージョンでkubectl
コマンドを再実行して手動でアップグレードしてください。認証情報を明示的に指定するで説明されているように、
operator.yaml
内の OperatorConfig リソースを変更して、サービス アカウント キーを指定できます。project-id
、location
、cluster
の値は、operator.yaml
内の Deployment リソースにargs
として追加できます。読み取り用に計画されたテナンシー モデルに基づいて
project-id
を選択することをおすすめします。後で指標スコープを使用して読み取りを整理する方法に基づいて、指標を保存するプロジェクトを選択します。問題がなければ、すべてを 1 つのプロジェクトにまとめても構いません。location
については、デプロイに最も近い Google Cloud リージョンを選択することをおすすめします。選択した Google Cloud リージョンがデプロイから遠くなるほど、書き込みレイテンシが大きくなり、より多くのネットワーク問題が発生する可能性があります。複数のクラウドにまたがるリージョンのリストをご覧ください。問題がなければ、すべてを 1 つの Google Cloud リージョンにまとめることができます。global
をロケーションとして使用することはできません。cluster
には、Operator がデプロイされているクラスタの名前を選択することをおすすめします。正しく構成されると、OperatorConfig は次のようになります。
apiVersion: monitoring.googleapis.com/v1 kind: OperatorConfig metadata: namespace: gmp-public name: config collection: credentials: name: gmp-test-sa key: key.json rules: credentials: name: gmp-test-sa key: key.json
Deployment リソースは次のようになります。
apiVersion: apps/v1 kind: Deployment ... spec: ... template: ... spec: ... containers: - name: operator ... args: - ... - "--project-id=PROJECT_ID" - "--cluster=CLUSTER_NAME" - "--location=REGION"
この例では、
REGION
変数がus-central1
などの値に設定されていることを前提としています。Google Cloud の外部で Managed Service for Prometheus を実行すると、データ転送料金が発生します。Google Cloud へのデータ転送には料金がかかります。また、別のクラウドからのデータ移転にも料金が発生する場合があります。バージョン 0.5.0 以降では、OperatorConfig で gzip 圧縮を有効にすると、これらの費用を最小限に抑えることができます。太字で示されているテキストをリソースに追加します。
apiVersion: monitoring.googleapis.com/v1 kind: OperatorConfig metadata: namespace: gmp-public name: config collection: compression: gzip ...
マネージド コレクション カスタム リソースに関する関連情報
Prometheus カスタム リソースのすべてのマネージド サービスに関するリファレンス ドキュメントについては、prometheus-engine/doc/api リファレンスをご覧ください。
次のステップ