Grafana を使用したクエリ

Google Cloud Managed Service for Prometheus をデプロイすると、マネージド サービスに送信されたデータをクエリして、結果をグラフやダッシュボードに表示できます。

このドキュメントでは、クエリできるデータを決める指標スコープと、収集したデータを Grafana で取得して使用する方法について説明します。

Managed Service for Prometheus のクエリ インターフェースはすべて、Cloud Monitoring API を使用して Monarch からデータを取得するように構成されています。ローカルの Prometheus サーバーからデータをクエリする代わりに Monarch をクエリすることにより、グローバルなモニタリングを大規模に実施できます。

準備

マネージド サービスをまだデプロイしていない場合は、マネージド コレクションまたはセルフデプロイ コレクションを設定します。PromQL を使用した Cloud Monitoring 指標のクエリのみに関心がある場合は、これをスキップできます。

環境を構成する

プロジェクト 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

サービス アカウントの認証情報を確認する

Kubernetes クラスタで Workload Identity Federation for GKE が有効になっている場合は、このセクションをスキップできます。

GKE で実行すると、Managed Service for Prometheus は Compute Engine のデフォルトのサービス アカウントに基づいて環境から認証情報を自動的に取得します。デフォルトのサービス アカウントには、必要な権限である monitoring.metricWritermonitoring.viewer がデフォルトで付与されています。Workload Identity Federation for GKE を使用しておらず、以前にいずれかのロールをデフォルトのノードサービス アカウントから削除している場合は、続行する前に、不足している権限を再度追加する必要があります。

GKE で実行していない場合は、認証情報を明示的に提供するをご覧ください。

Workload Identity Federation for GKE 用のサービス アカウントを構成する

Kubernetes クラスタで Workload Identity Federation for GKE が有効になっていない場合は、このセクションをスキップできます。

Managed Service for Prometheus は、Cloud Monitoring API を使用して指標データをキャプチャします。クラスタで Workload Identity Federation for GKE を使用している場合は、Kubernetes サービス アカウントに Monitoring API の権限を付与する必要があります。このセクションでは、次のことを説明します。

サービス アカウントを作成してバインドする

この手順は、Managed Service for Prometheus のドキュメントの複数の場所で説明されています。前のタスクですでに行っている場合は、この手順を繰り返す必要はありません。サービス アカウントを承認するに進んでください。

次のコマンド シーケンスでは、gmp-test-sa サービス アカウントを作成し、NAMESPACE_NAME 名前空間でデフォルトの Kubernetes サービス アカウントにバインドします。

gcloud config set project PROJECT_ID \
&&
gcloud iam service-accounts create gmp-test-sa \
&&
gcloud iam service-accounts add-iam-policy-binding \
  --role roles/iam.workloadIdentityUser \
  --member "serviceAccount:PROJECT_ID.svc.id.goog[NAMESPACE_NAME/default]" \
  gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \
&&
kubectl annotate serviceaccount \
  --namespace NAMESPACE_NAME \
  default \
  iam.gke.io/gcp-service-account=gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com

別の GKE 名前空間またはサービス アカウントを使用している場合は、コマンドを適宜調整してください。

サービス アカウントを承認する

ロールには関連する権限がまとめられています。このロールをプリンシパル(この例では Google Cloud サービス アカウント)に付与します。Monitoring のロールの詳細については、アクセス制御をご覧ください。

次のコマンドは、Google Cloud サービス アカウント gmp-test-sa に、指標データの読み取りに必要な Monitoring API のロールを付与します。

前のタスクで Google Cloud サービス アカウントに特定のロールを付与している場合は、再度付与する必要はありません。

サービス アカウントにマルチプロジェクト指標スコープからの読み取りを承認するには、以下の手順を行い、クエリされたプロジェクトを変更するをご覧ください。

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member=serviceAccount:gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \
  --role=roles/monitoring.viewer \
&& \
gcloud projects add-iam-policy-binding PROJECT_ID \
  --member=serviceAccount:gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \
  --role=roles/iam.serviceAccountTokenCreator

Workload Identity Federation for GKE の構成をデバッグする

Workload Identity Federation for GKE の動作に問題がある場合は、Workload Identity Federation for GKE の設定の確認Workload Identity Federation for GKE のトラブルシューティング ガイドをご覧ください。

Workload Identity Federation for GKE の構成で最も一般的なエラーの原因は入力ミスや、部分的なコピー / 貼り付けです。これらの手順のコードサンプルに埋め込まれた編集可能な変数と、クリック可能なコピー / 貼り付けアイコンを使用することを強くおすすめします。

本番環境での Workload Identity Federation for GKE

このドキュメントの例では、Google Cloud サービス アカウントをデフォルトの Kubernetes サービス アカウントにバインドし、Monitoring API を使用するために必要なすべての権限を Google Cloud サービス アカウントに付与しています。

本番環境では、各コンポーネントのサービス アカウントを最小権限で使用し、よりきめ細かいアプローチを使用する必要があります。Workload Identity 管理のサービス アカウントを構成する方法の詳細については、Workload Identity Federation for GKE の使用をご覧ください。

クエリと指標のスコープ

クエリの対象となるデータは、データのクエリに使用する方法に関係なく、Cloud Monitoring 構成の指標スコープによって決まります。たとえば、Grafana を使用して Prometheus 向けのマネージド サービスのデータをクエリする場合は、各指標スコープを個別のデータソースとして構成する必要があります。

Monitoring の指標スコープは読み取り専用の構成です。これを使用すると、複数の Google Cloud プロジェクトに属している指標データをクエリできます。すべての指標スコープは、スコープ対象プロジェクトと呼ばれる専用の Google Cloud プロジェクトでホストされます。

デフォルトでは、プロジェクトは独自の指標スコープのスコープ対象プロジェクトであり、指標スコープにはそのプロジェクトの指標と構成が含まれます。スコープ対象プロジェクトは、指標スコープ内に複数のモニタリング対象プロジェクトを持つことができます。指標スコープ内のすべてのモニタリング対象プロジェクトの指標と構成は、そのスコープ対象プロジェクトに表示されます。1 つのモニタリング対象プロジェクトが複数の指標スコープに属している場合もあります。

スコープ対象プロジェクト内の指標をクエリし、そのスコープ対象プロジェクトがマルチプロジェクトの指標スコープをホストしている場合は、複数のプロジェクトからデータを取得できます。指標スコープにすべてのプロジェクトが含まれている場合、クエリとルールはグローバルに評価されます。

スコープ対象プロジェクトと指標スコープの詳細については、指標スコープをご覧ください。マルチプロジェクトの指標スコープを構成する方法については、複数のプロジェクトの指標を表示するをご覧ください。

Cloud Monitoring での Managed Service for Prometheus データ

Prometheus データがエクスポートされていることを確認する最も簡単な方法は、Google Cloud コンソールの Cloud Monitoring で Metrics Explorer ページを使用することです(これは PromQL をサポートしています)。手順については、Cloud Monitoring で PromQL を使用してクエリを実行するをご覧ください。

Grafana ダッシュボードを Cloud Monitoring にインポートすることもできます。これにより、Grafana インスタンスを構成またはデプロイすることなく、コミュニティによって作成されたダッシュボードまたは個人の Grafana ダッシュボードを引き続き使用できます。

Grafana

Managed Service for Prometheus は、Grafana の組み込み型 Prometheus データソースを使用するため、変更なしで、コミュニティで作成されたダッシュボードや個人の Grafana ダッシュボードを引き続き使用できます。

必要に応じて Grafana をデプロイする

クラスタ内に実行中の Grafana Deployment がない場合は、一時的なテスト Deployment を作成してテストできます。

エフェメラル Grafana Deployment を作成するには、クラスタに Managed Service for Prometheus grafana.yaml マニフェストを適用し、grafana サービスをローカルマシンにポート転送します。CORS の制限により、Cloud Shell を使用して Grafana デプロイメントにアクセスすることはできません。

  1. grafana.yaml マニフェストを適用します。

    kubectl -n NAMESPACE_NAME apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.13.0/examples/grafana.yaml
    
  2. grafana サービスをローカルマシンにポート転送します。この例では、サービスをポート 3000 に転送します。

    kubectl -n NAMESPACE_NAME port-forward svc/grafana 3000
    

    このコマンドは何も返さず、実行中に URL へのアクセスが報告されます。

    Grafana には、ブラウザで URL http://localhost:3000 から username:password admin:admin でアクセスできます。

次の手順で新しい Prometheus データソースを Grafana に追加します。

  1. たとえば、URL http://localhost:3000 を参照して Grafana のスタートページに移動して、Grafana Deployment に移動します。

  2. Grafana のメインメニューから [Connections] を選択し、[Data Sources] を選択します。

    Grafana にデータソースを追加する。

  3. [Add data source] を選択し、時系列データベースとして Prometheus を選択します。

    Prometheus データソースを追加します。

  4. データソースに名前を付け、URL フィールドを http://localhost:9090 に設定し、[Save & Test] を選択します。データソースが正しく構成されていないというエラーは無視できます。

  5. デプロイのローカル サービスの URL をコピーします。URL は次のようになります。

    http://grafana.NAMESPACE_NAME.svc:3000
    

Grafana データソースの構成と認証

Google Cloud APIs では、すべて OAuth2 を使用した認証が必要です。ただし、Grafana では、Prometheus データソースで使用されるサービス アカウントの OAuth2 認証はサポートされていません。Grafana と Managed Service for Prometheus を使用するには、データソース同期ツールを使用してサービス アカウントの OAuth2 認証情報を生成し、Grafana データソース API を使用して Grafana と同期します。

Grafana を構成して、グローバルにデータのクエリを実行するには、データソース同期ツールを使用する必要があります。この操作を行わない場合、Grafana はローカル Prometheus サーバーのデータに対してのみクエリを実行します。

データソース同期ツールは、cron ジョブを使用して特定の Grafana Prometheus データソースにリモートで構成値を同期するコマンドライン インターフェース ツールです。これにより、Grafana データソースで以下が正しく構成されていることが保証されます。

  • 認証。OAuth2 アクセス トークンを定期的に更新します。
  • Prometheus サーバー URL として設定された Cloud Monitoring API
  • GET に設定された HTTP メソッド
  • Prometheus のタイプとバージョンが 2.40.x 以上に設定されていること
  • HTTP とクエリのタイムアウト値が 2 分に設定されていること

データソース同期ツールは、Google Cloud サービス アカウントを使用して、Cloud Monitoring データのクエリに必要な IAM 権限を持つ Google Cloud API アクセス トークンを定期的に生成します。Google Cloud API アクセス トークンの有効期間は 1 時間であるため、データソース同期ツールは 30 分ごとに実行され、Grafana と Cloud Monitoring API 間の認証済み接続が中断していないことを確認します。

データソース シンクロナイザの実行方法として、Kubernetes CronJob を使用できます。また、Cloud Run と Cloud Scheduler を使用して完全にサーバーレスにすることもできます。オープンソースの Grafana や Grafana Enterprise などを使用して Grafana をローカルにデプロイする場合は、Grafana が実行されているクラスタでデータソース同期ツールを実行することをおすすめします。Grafana Cloud を使用する場合は、完全にサーバーレスのオプションを選択することをおすすめします。

Serverless を使用する

Cloud Run と Cloud Scheduler を使用してサーバーレス データソース同期ツールをデプロイして実行するには、次の操作を行います。

  1. データソース同期ツールをデプロイするプロジェクトを選択します。マルチプロジェクトの指標スコープのスコープ対象プロジェクトを選択することをおすすめします。データソース同期ツールは、構成された Google Cloud プロジェクトをスコープ対象プロジェクトとして使用します。

    次に、データソース同期ツールのサービス アカウントを構成して認可します。次のコマンド シーケンスでは、サービス アカウントを作成し、複数の IAM ロールを付与します。最初の 2 つのロールにより、サービス アカウントは Cloud Monitoring API から読み取り、サービス アカウント トークンを生成できます。最後の 2 つのロールにより、サービス アカウントは Secret Manager から Grafana サービス アカウント トークンを読み取り、Cloud Run を呼び出すことができます。

    gcloud config set project PROJECT_ID \
    &&
    gcloud iam service-accounts create gmp-ds-syncer-sa \
    &&
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=serviceAccount:gmp-ds-syncer-sa@PROJECT_ID.iam.gserviceaccount.com \
    --role=roles/monitoring.viewer \
    && \
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=serviceAccount:gmp-ds-syncer-sa@PROJECT_ID.iam.gserviceaccount.com \
    --role=roles/iam.serviceAccountTokenCreator \
    && \
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=serviceAccount:gmp-ds-syncer-sa@PROJECT_ID.iam.gserviceaccount.com \
    --role=roles/secretmanager.secretAccessor
    && \
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=serviceAccount:gmp-ds-syncer-sa@PROJECT_ID.iam.gserviceaccount.com \
    --role=roles/run.invoker
    
  2. Grafana インスタンスの URL を確認します。たとえば、Grafana Cloud デプロイの場合は https://yourcompanyname.grafana.net です。Grafana インスタンスには Cloud Run からアクセスできる必要があります。つまり、広範なインターネットからアクセスできる必要があります。

    インターネットから Grafana インスタンスにアクセスできない場合は、代わりに Kubernetes にデータソース同期ツールをデプロイすることをおすすめします。

  3. Managed Service for Prometheus に使用する Grafana Prometheus データソース(新規または既存の Prometheus データソース)を選択し、データソース UID を探して書き留めます。データソースの UID は、データソースを探索または構成するときに URL の最後の部分に表示されます(例: https://yourcompanyname.grafana.net/connections/datasources/edit/GRAFANA_DATASOURCE_UID)。データソースの URL 全体をコピーしないでください。URL の固有識別子のみをコピーします。

    Grafana でデータソースの UID を見つけます。

  4. サービス アカウントを作成して、アカウントで使用するトークンを生成することで、Grafana サービス アカウントを設定します。

    1. Grafana のナビゲーション サイドバーで、[Administration] > [Users and Access] > [Service Accounts] をクリックします。

    2. [Add service account] をクリックしてサービス アカウントを作成します。名前を指定し、[Data Sources > Writer] ロールを付与します。[Apply] ボタンをクリックして、ロールを割り当てます。以前のバージョンの Grafana では、代わりに「管理者」ロールを使用できます。

    3. [Add service account token] をクリックします。

    4. トークンの有効期限を「No expiration」に設定し、[Generate token] をクリックします。次に、生成されたトークンをクリップボードにコピーして、次のステップで GRAFANA_SERVICE_ACCOUNT_TOKEN として使用します。

      Grafana でサービス アカウント トークンを生成して保存します。

  5. 前の手順の結果を使用して、次のドキュメント変数を設定します。これをターミナルに貼り付ける必要はありません。

    # These values are required.
    REGION # The Google Cloud region where you want to run your Cloud Run job, such as us-central1.
    PROJECT_ID # The Project ID from Step 1.
    GRAFANA_INSTANCE_URL # The Grafana instance URL from step 2. This is a URL. Include "http://" or "https://".
    GRAFANA_DATASOURCE_UID # The Grafana data source UID from step 3. This is not a URL.
    GRAFANA_SERVICE_ACCOUNT_TOKEN # The Grafana service account token from step 4.
    
  6. Secret Manager でシークレットを作成します。

    gcloud secrets create datasource-syncer --replication-policy="automatic" && \
    echo -n GRAFANA_SERVICE_ACCOUNT_TOKEN | gcloud secrets versions add datasource-syncer --data-file=-
    
  7. 次の YAML ファイルを作成し、「cloud-run-datasource-syncer.yaml」という名前を付けます。

    apiVersion: run.googleapis.com/v1
    kind: Job
    metadata:
     name: datasource-syncer-job
    spec:
     template:
       spec:
         taskCount: 1
         template:
           spec:
             containers:
             - name: datasource-syncer
               image: gke.gcr.io/prometheus-engine/datasource-syncer:v0.14.0-gke.0
               args:
               - "--datasource-uids=GRAFANA_DATASOURCE_UID"
               - "--grafana-api-endpoint=GRAFANA_INSTANCE_URL"
               - "--project-id=PROJECT_ID"
               env:
               - name: GRAFANA_SERVICE_ACCOUNT_TOKEN
                 valueFrom:
                   secretKeyRef:
                     key: latest
                     name: datasource-syncer
             serviceAccountName: gmp-ds-syncer-sa@PROJECT_ID.iam.gserviceaccount.com
    

    次に、下のコマンドを実行し、YAML ファイルを使用して Cloud Run ジョブを作成します。

    gcloud run jobs replace cloud-run-datasource-syncer.yaml --region REGION
    
  8. Cloud Scheduler で、Cloud Run ジョブを 10 分ごとに実行するスケジュールを作成します。

    gcloud scheduler jobs create http datasource-syncer \
    --location REGION \
    --schedule="*/10 * * * *" \
    --uri="https://REGION-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/PROJECT_ID/jobs/datasource-syncer-job:run" \
    --http-method POST \
    --oauth-service-account-email=gmp-ds-syncer-sa@PROJECT_ID.iam.gserviceaccount.com
    

    次に、作成したスケジューラを強制的に実行します。

    gcloud scheduler jobs run datasource-syncer --location REGION
    

    データソースが更新されるまでに 15 秒ほどかかることがあります。

  9. 新しく構成した Grafana データソースに移動し、Prometheus サーバー URL の値が https://monitoring.googleapis.com で始まっていることを確認します。ページの更新が必要になることもあります。確認したら、ページの下部に移動し、[Save & test] を選択します。データソースが正しく構成されていることを示す緑色のチェックマークが表示されていることを確認します。Grafana のラベルの予測入力が機能するように、[Save & test] を少なくとも 1 回選択する必要があります。

Kubernetes を使用する

Kubernetes クラスタにデータソース同期ツールをデプロイして実行するには、次の操作を行います。

  1. データソース同期ツールをデプロイするプロジェクト、クラスタ、Namespace を選択します。データソース同期ツールは、マルチプロジェクトの指標スコープのスコープ対象プロジェクトに属するクラスタにデプロイすることをおすすめします。データソース同期ツールは、構成された Google Cloud プロジェクトをスコープ対象プロジェクトとして使用します。

    次に、データソース同期ツールを適切に構成して認可していることを確認します。

    次に、マルチプロジェクト クエリ用にデータソース同期ツールを認可する必要があるかどうかを判断します。

  2. Grafana インスタンスの URL を特定します。たとえば、Grafana Cloud デプロイの場合は https://yourcompanyname.grafana.net、テストデプロイ YAML を使用して構成されたローカル インスタンスの場合は http://grafana.NAMESPACE_NAME.svc:3000 です。

    Grafana をローカルにデプロイし、TLS を使用してクラスタ内のすべてのトラフィックを保護するようにクラスタが構成されている場合は、URL で https:// を使用し、サポートされている TLS 認証オプションのいずれかを使用して認証を行う必要があります。

  3. Managed Service for Prometheus に使用する Grafana Prometheus データソース(新規または既存の Prometheus データソース)を選択し、データソース UID を探して書き留めます。データソースの UID は、データソースを探索または構成するときに URL の最後の部分に表示されます(例: https://yourcompanyname.grafana.net/connections/datasources/edit/GRAFANA_DATASOURCE_UID)。データソースの URL 全体をコピーしないでください。URL の固有識別子のみをコピーします。

    Grafana でデータソースの UID を見つけます。

  4. サービス アカウントを作成して、アカウントで使用するトークンを生成することで、Grafana サービス アカウントを設定します。

    1. Grafana のナビゲーション サイドバーで、[Administration] > [Users and Access] > [Service Accounts] をクリックします。

    2. [Add service account] をクリックしてサービス アカウントを作成します。名前を指定し、[Data Sources > Writer] のいずれかのロールを付与します。以前のバージョンの Grafana では、代わりに「管理者」ロールを使用できます。

    3. [Add service account token] をクリックします。

    4. トークンの有効期限を「No expiration」に設定し、[Generate token] をクリックします。次に、生成されたトークンをクリップボードにコピーして、次のステップで GRAFANA_SERVICE_ACCOUNT_TOKEN として使用します。

      Grafana でサービス アカウント トークンを生成して保存します。

  5. 前の手順の結果を使用して、次の環境変数を設定します。

    # These values are required.
    PROJECT_ID=PROJECT_ID # The Project ID from Step 1.
    GRAFANA_API_ENDPOINT=GRAFANA_INSTANCE_URL # The Grafana instance URL from step 2. This is a URL. Include "http://" or "https://".
    DATASOURCE_UIDS=GRAFANA_DATASOURCE_UID # The Grafana data source UID from step 3. This is not a URL.
    GRAFANA_API_TOKEN=GRAFANA_SERVICE_ACCOUNT_TOKEN # The Grafana service account token from step 4.
    
  6. 次のコマンドを実行して、初期化時と 30 分ごとにデータソースを更新する CronJob を作成します。Workload Identity Federation for GKE を使用している場合、NAMESPACE_NAME の値は、以前にサービス アカウントにバインドした Namespace と同じにする必要があります。

    curl https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/0ca68f91fedb8ab9fc5bc6871c3b100dd602e32b/cmd/datasource-syncer/datasource-syncer.yaml \
    | sed 's|$DATASOURCE_UIDS|'"$DATASOURCE_UIDS"'|; s|$GRAFANA_API_ENDPOINT|'"$GRAFANA_API_ENDPOINT"'|; s|$GRAFANA_API_TOKEN|'"$GRAFANA_API_TOKEN"'|; s|$PROJECT_ID|'"$PROJECT_ID"'|;' \
    | kubectl -n NAMESPACE_NAME apply -f -
    
  7. 新しく構成した Grafana データソースに移動し、Prometheus サーバー URL の値が https://monitoring.googleapis.com で始まっていることを確認します。ページの更新が必要になることもあります。確認したら、ページの下部に移動し、[Save & test] を選択します。Grafana のラベルの予測入力が機能するように、このボタンを少なくとも 1 回選択する必要があります。

Grafana を使用してクエリを実行する

これで、Grafana ダッシュボードを作成し、構成されたデータソースを使用してクエリを実行できるようになりました。次のスクリーンショットは、up 指標を表示する Grafana チャートを示しています。

Managed Service for Prometheus の「up」指標を表す Grafana チャート。

PromQL を使用して Google Cloud システムの指標をクエリする方法については、Cloud Monitoring 指標向け PromQL をご覧ください。

GKE の外部でのデータソース同期ツールの実行

Google Kubernetes Engine クラスタでデータソース同期ツールを実行している場合や、サーバーレス オプションを使用している場合は、このセクションをスキップできます。GKE で認証の問題が発生した場合は、サービス アカウントの認証情報を確認するをご覧ください。

GKE で実行する場合、ノードのサービス アカウントまたは Workload Identity Federation for GKE の設定に基づいて、データソース同期ツールが環境から認証情報を自動的に取得します。GKE 以外の Kubernetes クラスタでは、GOOGLE_APPLICATION_CREDENTIALS 環境変数を使用して、認証情報をデータソース同期ツールに明示的に提供する必要があります。

  1. コンテキストをターゲット プロジェクトに設定します。

    gcloud config set project PROJECT_ID
    
  2. サービス アカウントの作成:

    gcloud iam service-accounts create gmp-test-sa
    

    この手順では、Workload Identity Federation for GKE の手順ですでに作成したサービス アカウントを作成します。

  3. サービス アカウントに必要な権限を付与します。

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \
      --role=roles/monitoring.viewer \
    && \
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \
      --role=roles/iam.serviceAccountTokenCreator
    

  4. サービス アカウント キーを作成してダウンロードします。

    gcloud iam service-accounts keys create gmp-test-sa-key.json \
      --iam-account=gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com
    
  5. GOOGLE_APPLICATION_CREDENTIALS 環境変数を使用して、キーファイルのパスを設定します。

データソース同期ツールを認可してマルチプロジェクト モニタリングを行う

Managed Service for Prometheus は、指標スコープを使用してマルチプロジェクト モニタリングをサポートします。

サーバーレス オプションを使用している場合、選択したプロジェクトがマルチプロジェクトの指標スコープのスコープ対象プロジェクトである場合は、マルチプロジェクトのクエリが実行されます。

Kubernetes にデータソース同期ツールをデプロイする場合、ローカル プロジェクトがスコープ対象プロジェクトであり、ローカル プロジェクトのサービス アカウントを確認または構成する手順に沿って操作している場合は、追加の構成を行うことなく、マルチプロジェクト クエリが機能します。

ローカル プロジェクトがスコープ対象プロジェクトでない場合は、ローカル プロジェクトのデフォルトのコンピューティング サービス アカウントまたは Workload Identity Federation for GKE サービス アカウントを認可し、スコープ対象プロジェクトに対する monitoring.viewer アクセスを許可する必要があります。次に、スコープ対象プロジェクトの ID を PROJECT_ID 環境変数の値として渡します。

Compute Engine default サービス アカウントを使用する場合は、次のいずれかを行います。

  • スコープ対象プロジェクトに属するクラスタにデータソース同期ツールをデプロイします。

  • クラスタで Workload Identity Federation for GKE を有効にし、構成手順を実施します。

  • 明示的なサービス アカウント キーを提供します。

別の Google Cloud プロジェクトへのアクセスに必要な権限をサービス アカウントに付与するには、次の操作を行います。

  1. クエリするターゲット プロジェクトからの読み取り権限をサービス アカウントに付与します。

    gcloud projects add-iam-policy-binding SCOPING_PROJECT_ID \
      --member=serviceAccount:gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \
      --role=roles/monitoring.viewer
    
  2. データソース同期ツールを構成するときに、スコープ対象プロジェクトの ID を PROJECT_ID 環境変数の値として渡します。

Kubernetes CronJob を検査する

Kubernetes にデータソース同期ツールをデプロイする場合は、次のコマンドを実行して CronJob を検査し、すべての変数が正しく設定されていることを確認できます。

kubectl describe cronjob datasource-syncer

Grafana を最初に構成したジョブのログを表示するには、datasource-syncer.yaml ファイルを適用した直後に次のコマンドを実行します。

kubectl logs job.batch/datasource-syncer-init

破棄

Kubernetes でデータソースの同期 Cronjob を無効にするには、次のコマンドを実行します。

kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/main/cmd/datasource-syncer/datasource-syncer.yaml

データソース同期ツールを無効にすると、リンクされた Grafana が最新の認証情報で更新されなくなるため、Managed Service for Prometheus に対するクエリは機能しなくなります。

API の互換性

次の Prometheus HTTP API エンドポイントは、接頭辞が https://monitoring.googleapis.com/v1/projects/PROJECT_ID/location/global/prometheus/api/v1/ の URL で Managed Service for Prometheus によってサポートされます。

詳細については、Cloud Monitoring API のリファレンス ドキュメントをご覧ください。Promethus HTTP エンドポイントは、Cloud Monitoring の言語固有のクライアント ライブラリでは使用できません。

PromQL の互換性については、PromQL のサポートをご覧ください。

  • 次のエンドポイントは完全にサポートされています。

    • /api/v1/query
    • /api/v1/query_range
    • /api/v1/metadata
    • /api/v1/labels
    • /api/v1/query_exemplars
  • /api/v1/label/<label_name>/values エンドポイントが機能するのは、__name__ ラベルを <label_name> 値として使用するか、時系列セレクタで完全一致させる場合のみです。たとえば、次の呼び出しは完全にサポートされています。

    • /api/v1/label/__name__/values
    • /api/v1/label/__name__/values?match[]={__name__=~".*metricname.*"}
    • /api/v1/label/labelname/values?match[]={__name__="metricname"}

    この制限により、Grafana の label_values($label) 変数のクエリは失敗します。代わりに label_values($metric, $label) を使用できます。ダッシュボードに関係のない指標のラベル値は取得されないため、このタイプのクエリはおすすめしません。

  • /api/v1/series エンドポイントは GET でサポートされますが、POST リクエストではサポートされません。データソース同期ツールまたはフロントエンド プロキシを使用する場合、この制限は自動的に管理されます。GET リクエストのみを発行するように、Grafana で Prometheus のデータソースを構成することもできます。 match[] パラメータは、__name__ ラベルでの正規表現の照合をサポートしていません。

次のステップ