Cloud Monitoring の PromQL

このドキュメントでは、Cloud Monitoring から指標データを読み取るように Grafana を構成する方法について説明します。その後、PromQL を使用してデータを可視化し、グラフ化できます。Grafana と Cloud Monitoring は、データソース同期ツールと呼ばれるプロセスによってリンクされています。これにより、Grafana データソースと Cloud Monitoring 間の通信が可能になります。データソース同期ツールは次の処理を行います。

  • 構成値を Grafana データソースに送信します。
  • Cloud Monitoring から指標データを読み取ることができる Trusted Cloud by S3NS サービス アカウントの認証情報を保持します。

このドキュメントでは、データソース同期ツールを設定する方法について説明し、Cloud Monitoring で PromQL を使用する場合の固有の情報を提供します。このドキュメントは、Grafana に精通していることを前提としています。

Grafana による指標データの読み取りを認可する

このセクションでは、データソース同期ツールを使用して認証情報を生成して同期し、Cloud Monitoring と Grafana 間の認可を設定する方法について説明します。

認可にデータソース同期ツールを使用する

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

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

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

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

データソース同期ツールは繰り返し実行する必要があります。Trusted Cloud by S3NS API アクセス トークンの有効期間は 1 時間であるため、データソース同期ツールを 10 分ごとに実行すると、Grafana と Cloud Monitoring API 間の認証済み接続が中断されなくなります。

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

Grafana を使用して、Google Kubernetes Engine サービスや他の環境から Cloud Monitoring 指標データをクエリできます。この手順では、編集可能な変数を使用して実行可能なコマンドを作成します。コードサンプルに埋め込まれた編集可能な変数と、クリック可能なコピー / 貼り付けアイコンを使用することを強くおすすめします。

GKE

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

  1. データソース同期ツールをデプロイするプロジェクト、クラスタ、Namespace を選択します。

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

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

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

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

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

    1. Grafana のナビゲーション サイドバーで、[Administration] > [Users and Access] > [Service Accounts] をクリックします。
    2. [Add service account] をクリックしてサービス アカウントを作成します。名前を指定し、Grafana の「Admin」ロールを付与します。使用している Grafana のバージョンでより細かい権限が許可されている場合は、[Data Source] > [Writer] ロールを使用できます。

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

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

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

    # These values are required.
    PROJECT_ID=SCOPING_PROJECT_ID # The value from Step 1.
    GRAFANA_API_ENDPOINT=GRAFANA_INSTANCE_URL # The value from step 2. This is a URL.
    DATASOURCE_UIDS=GRAFANA_DATASOURCE_UID # The value from step 3. This is not a URL.
    GRAFANA_API_TOKEN=GRAFANA_SERVICE_ACCOUNT_TOKEN # The value from step 4.
    GCM_ENDPOINT_OVERRIDE=--gcm-endpoint-override="https://monitoring.s3nsapis.fr/v1/projects/PROJECT_ID/location/global/prometheus/"
    
  6. 次のコマンドを実行して、初期化時と 10 分ごとにデータソースを更新する CronJob を作成します。Workload Identity Federation for GKE を使用している場合、NAMESPACE_NAME の値は、以前にサービス アカウントにバインドした Namespace と同じにする必要があります。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

次のコマンドを実行すると、 Trusted Cloud サービス アカウント SERVICE_ACCT_NAME に、指標データの読み取りに必要な Monitoring API のロールが付与されます。

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

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member=serviceAccount:SERVICE_ACCT_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com \
  --role=roles/monitoring.viewer \
&& \
gcloud projects add-iam-policy-binding PROJECT_ID \
  --member=serviceAccount:SERVICE_ACCT_NAME@PROJECT_ID.s3ns-system.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

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

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

他の場所

Google Kubernetes Engine 以外の環境にデータソース同期ツールをデプロイして実行するには、次の操作を行います。

  1. データソース同期ツールが使用するサービス アカウントを設定します。

    1. gcloud コマンドのデフォルト プロジェクトを設定します。

      gcloud config set project PROJECT_ID
      
    2. データソース同期ツールが使用するサービス アカウントを作成します。

      gcloud iam service-accounts create DS_SYNCER_SVCACCT_NAME
      
    3. サービス アカウントに指標データを読み取る権限を付与します。

       gcloud projects add-iam-policy-binding PROJECT_ID \
       --member=serviceAccount:DS_SYNCER_SVCACCT_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com \
       --role=roles/monitoring.viewer \
       && \
       gcloud projects add-iam-policy-binding PROJECT_ID \
       --member=serviceAccount:DS_SYNCER_SVCACCT_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com \
       --role=roles/iam.serviceAccountTokenCreator
      
    4. サービス アカウントのキーを作成します。

      gcloud iam service-accounts keys create DS_SYNCER_SVCACCT_KEYFILE_NAME.json \
      --iam-account DS_SYNCER_SVCACCT_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com
      

      このディレクトリのパスは、次の手順で環境変数を設定するために使用します。パスを取得するには、pwd コマンドを実行して値を記録します。

      pwd
      DS_SYNCER_SVCACCT_KEYFILE_DIR
      
  2. Grafana インスタンスの URL を確認します。たとえば、Grafana Cloud デプロイの場合は https://yourcompanyname.grafana.net、ローカル テスト インスタンスの場合は https://localhost:3000 です。この値は、データソース同期ツールを実行するコマンドで使用されます。

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

  3. Grafana で、Cloud Monitoring に使用する Prometheus データソースを追加し、データソースの UID を記録します。

    1. [接続> [データソース> [Add a new data source] をクリックします。時系列データベースのリストから [Prometheus] を選択します。

    2. [Prometheus server URL] フィールドに次の値を入力します。

      https://monitoring.s3nsapis.fr/v1/projects/PROJECT_ID/location/global/prometheus/
      
    3. [Save and test] をクリックします。

      データソース ページのブラウザの URL には、データソース UI が含まれています(例: https://yourcompanyname.grafana.net/connections/datasources/edit/GRAFANA_DATASOURCE_UID.)。

    4. データソースの UID を記録します。この値は、データソース同期ツールを実行するコマンドで使用されます。データソースの URL 全体をコピーしないでください。URL の固有識別子のみをコピーします。これは ee0z3woqjah34e のような値です。

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

    1. Grafana のナビゲーション サイドバーで、[Administration] | [Users and Access] | [Service Accounts] をクリックします。
    2. [Add service account] をクリックしてサービス アカウントを作成します。名前を指定し、Grafana で「管理者」ロールを付与します。

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

    4. トークンの有効期限を「No expiration」に設定し、[Generate token] をクリックします。次生成されたトークンを次の編集可能な変数にコピーします。この値は、データソース同期ツールを実行するコマンドで使用されます。

      GRAFANA_SERVICE_ACCOUNT_TOKEN
      
  5. データソース同期ツールを実行します。Docker を使用してビルド済みのコンテナ イメージから同期ツールを実行することも、ソースからコードをビルドして手動で実行することもできます。データソース同期ツールは Go アプリケーションであるため、ソースから同期ツールをビルドするには Go をインストールする必要があります。

    Docker

    コンテナ イメージ gke.gcr.io/prometheus-engine/datasource-syncer:v0.15.3-gke.0 を使用して、Docker からデータソース同期ツールを実行します。テストでは、同期ツールを手動で実行できます。アクセス トークンの有効期間は 1 時間であるため、接続が機能していることを確認したら、cron ジョブなどの自動メカニズムを使用して、データソース同期ツールを 10 分ごとに実行し、接続が中断されないようにする必要があります。

    次の Docker コマンドを使用して、データソース同期ツールを実行します。

    docker run --network container:grafana -v "DS_SYNCER_SVCACCT_KEYFILE_DIR/DS_SYNCER_SVCACCT_KEYFILE_NAME.json:/app/DS_SYNCER_SVCACCT_KEYFILE_NAME.json" gke.gcr.io/prometheus-engine/datasource-syncer:v0.15.3-gke.0
    -datasource-uids=UID_OF_GRAFANA_DATASOURCE
    -grafana-api-token=GRAFANA_SERVICE_ACCOUNT_TOKEN
    -grafana-api-endpoint=URL_OF_GRAFANA_INSTANCE
    -project-id=PROJECT_ID
    -query.credentials-file=DS_SYNCER_SVCACCT_KEYFILE_DIR/DS_SYNCER_SVCACCT_KEYFILE_NAME.json
    -gcm-endpoint-override="https://monitoring.s3nsapis.fr/v1/projects/PROJECT_ID/location/global/prometheus/"
    

    データソース同期ツールを実行する cron ジョブを作成する手順は次のとおりです。

    1. cron テーブルを編集します。

      cron -e
      
    2. 上記のコマンドを 10 分ごとに実行するエントリを追加します。

      */10 * * * * * docker run --network container:grafana -v "DS_SYNCER_SVCACCT_KEYFILE_DIR/DS_SYNCER_SVCACCT_KEYFILE_NAME.json:/app/<KEY_ID>" gke.gcr.io/prometheus-engine/datasource-syncer:v0.15.3-gke.0 -datasource-uids=UID_OF_GRAFANA_DATASOURCE -grafana-api-token=GRAFANA_SERVICE_ACCOUNT_TOKEN -grafana-api-endpoint=URL_OF_GRAFANA_INSTANCE -project-id=PROJECT_ID -query.credentials-file=DS_SYNCER_SVCACCT_KEYFILE_DIR/DS_SYNCER_SVCACCT_KEYFILE_NAME.json -gcm-endpoint-override="https://monitoring.s3nsapis.fr/v1/projects/PROJECT_ID/location/global/prometheus/"
      

    データソース同期ツールの実行時に使用できるコマンドライン オプションの詳細については、README ドキュメントをご覧ください。

    ソースコード

    1. データソース同期ツールを自分でビルドするには、次の操作を行います。

      1. コードを格納するディレクトリを作成し、そのディレクトリに移動します。

        mkdir data-source-syncer-code
        
        cd data-source-syncer-code
        

        このディレクトリのパスは、次の手順で環境変数を設定するために使用します。パスを取得するには、pwd コマンドを実行して、編集可能な変数に記録します。

        pwd
        PATH_TO_LOCAL_REPO_COPY
        
      2. リポジトリの現在のリリースからコードのクローンを作成します。

        git clone -b 'v0.15.3' --single-branch https://github.com/GoogleCloudPlatform/prometheus-engine
        
      3. datasource-syncer ディレクトリに移動して、コードをビルドします。

        cd prometheus-engine/cmd/datasource-syncer
        
        go build main.go
        
    2. データソース同期ツールを実行します。テストでは、同期ツールを手動で実行できます。アクセス トークンの有効期間は 1 時間であるため、接続が機能していることを確認したら、cron ジョブなどの自動メカニズムを使用して、データソース同期ツールを 10 分ごとに実行し、接続が中断されないようにする必要があります。

      データソース同期ツールを手動で実行するには、次のコマンドを使用します。

      main -datasource-uids=UID_OF_GRAFANA_DATASOURCE
      -grafana-api-token=GRAFANA_SERVICE_ACCOUNT_TOKEN
      -grafana-api-endpoint=URL_OF_GRAFANA_INSTANCE
      -project-id=PROJECT_ID
      -query.credentials-file=DS_SYNCER_SVCACCT_KEYFILE_DIR/DS_SYNCER_SVCACCT_KEYFILE_NAME.json
      -gcm-endpoint-override="https://monitoring.s3nsapis.fr/v1/projects/PROJECT_ID/location/global/prometheus/"
      

      データソース同期ツールを実行する cron ジョブを作成する手順は次のとおりです。

      1. cron テーブルを編集します。

         cron -e
        
      2. 上記のコマンドを 10 分ごとに実行するエントリを追加します。

         */10 * * * * * main -datasource-uids=UID_OF_GRAFANA_DATASOURCE -grafana-api-token=GRAFANA_SERVICE_ACCOUNT_TOKEN -grafana-api-endpoint=URL_OF_GRAFANA_INSTANCE -project-id=PROJECT_ID -query.credentials-file=DS_SYNCER_SVCACCT_KEYFILE_DIR/DS_SYNCER_SVCACCT_KEYFILE_NAME.json -gcm-endpoint-override="https://monitoring.s3nsapis.fr/v1/projects/PROJECT_ID/location/global/prometheus/"
        

      データソース同期ツールの実行時に使用できるコマンドライン オプションの詳細については、README ドキュメントをご覧ください。

  6. 新しく構成した Grafana データソースに移動し、Prometheus サーバー URL の値が https://monitoring.s3nsapis.fr で始まっていることを確認します。ページの更新が必要になることもあります。確認したら、ページの下部に移動し、[Save & test] をクリックします。Grafana のラベルの予測入力が機能するように、このボタンを少なくとも 1 回クリックする必要があります。

Grafana で指標を表示する

Grafana で Trusted Cloud プロジェクトの指標を表示するには、次の操作を行います。

  1. ナビゲーション パネルまたは [データソース] ページで [探索] をクリックします。

  2. [指標] フィールドで、プルダウン メニューを使用して指標を選択します。[Metrics Explorer] を選択して、特定の指標を検索することもできます。指標が複数のモニタリング対象リソースに関連付けられている場合は、クエリに monitored_resource ラベルフィルタを追加して、リソースタイプを選択する必要があります。

  3. ラベルフィルタとオペレーションを追加して、クエリを作成します。

Grafana での可視化とダッシュボードの構築については、パネルと可視化をご覧ください。

命名規則

Prometheus の指標モデルと命名規則は、Cloud Monitoring で使用されるものとは異なります。PromQL を使用して Monitoring の指標データをクエリするには、Cloud Monitoring の名前を PromQL と互換性のある同等のものに変換する必要があります。命名規則については、Cloud Monitoring の指標を PromQL にマッピングするをご覧ください。

PromQL の学習

PromQL の基本的な使用方法については、オープンソースのドキュメントを参照することをおすすめします。使用を開始する際に、以下のリソースが役に立ちます。

PromQL の違い

Cloud Monitoring の PromQL は、アップストリームの PromQL とは若干異なる場合があります。

Cloud Monitoring の PromQL クエリは、内部クエリ言語を使用して Monarch バックエンドで部分的に評価されます。クエリ結果には違いがいくつかあります。このセクションに記載されている違いを除き、Cloud Monitoring の PromQL は Prometheus バージョン 2.44 で利用可能な PromQL と同等です。

Prometheus バージョン 2.44 より後に追加された PromQL 関数はサポートされません。

指標名の一致

指標名の完全一致のみがサポートされています。クエリには、指標名の完全一致を含める必要があります。

__name__ ラベルで正規表現マッチャーを使用する一般的なシナリオでは、次の回避策をおすすめします。

  • Prometheus アダプタの構成では、多くの場合、=~ 演算子を使用して複数の指標名を照合します。この使用方法を修正するには、構成を拡張して、指標ごとに個別のポリシーを使用し、各指標に明示的に名前を付けます。また、予期しない指標で誤って自動スケーリングが行われることもなくなります。
  • 正規表現は、複数の非ディメンション指標を同じグラフにグラフ化する際によく使用されます。たとえば、cpu_servicename_usage などの指標がある場合は、ワイルドカードを使用してすべてのサービスをまとめてグラフに表示できます。このような非ディメンション指標を使用することは、Cloud Monitoring では明示的に推奨されない方法であり、この方法はクエリのパフォーマンスを著しく低下させます。この使用方法を修正するには、ディメンションを指標名に埋め込むのではなく、すべてのディメンションを指標ラベルに移動します。
  • 複数の指標に対するクエリは、クエリ可能な指標を確認する際によく使用されます。代わりに、/labels/__name__/values 呼び出しを使用して指標を検出することをおすすめします。

Staleness

Staleness は Monarch バックエンドでサポートされていません。

irate の計算

irate 関数のルックバック ウィンドウがステップサイズよりも小さい場合、ステップサイズに合わせてウィンドウが大きくなります。Monarch では、すべての入力データが出力で完全に無視されないようにするため、この変更が必要になります。この違いは rate の計算にも適用されます。

rateincrease の計算

rate 関数のルックバック ウィンドウがステップサイズよりも小さい場合、ステップサイズに合わせてウィンドウが大きくなります。Monarch では、すべての入力データが出力で完全に無視されないようにするため、この変更が必要になります。この違いは irate の計算にも適用されます。

補間計算と外挿計算に違いがあります。Monarch では Prometheus とは異なる補間アルゴリズムが使用されるため、この違いによってわずかに異なる結果が生じる可能性があります。たとえば、Monarch カウンタのサンプルは、Prometheus が使用している単一のタイムスタンプではなく、時間範囲で保存されます。したがって、Prometheus のタイムスタンプは除外されますが、Monarch のカウンタ サンプルはレート計算に含めることができます。これによって、通常はより正確なレートの結果が得られます。特に、基になる時系列の開始位置または終了位置をまたいでクエリする際により正確な結果が得られます。

histogram_quantile の計算

サンプルのないヒストグラムに対する PromQL の histogram_quantile 計算では、NaN 値が生成されます。内部クエリ言語の計算では値は生成されません。代わりに、タイムスタンプのデータポイントがドロップされます。

レートの計算の違いは、histogram_quantile クエリへの入力にも影響します。

特定の型の関数を異なる型の指標に対して実行する場合

アップストリームの Prometheus では弱い型付けが使用されるのに対し、Monarch では強い型付けが使用されます。そのため、ある特定の型の関数を、異なる型の指標に対して実行する場合(たとえば、GAUGE 指標に対して rate() を実行する場合や、COUNTER または型指定なしの指標に対して histogram_quantile() を実行する場合など)、それらの関数はアップストリームの Prometheus では機能しますが、Cloud Monitoring では機能しません。