Cloud Monitoring 指標向け PromQL

PromQL を使用すると、Google Cloud システム指標Kubernetes 指標カスタム指標ログベースの指標など、Cloud Monitoring のすべての指標をクエリできます。

Cloud Monitoring の指標名と PromQL のマッピング

Cloud Monitoring の指標名には、ドメイン(compute.googleapis.com/ など)とパス(instance/disk/max_read_ops_count など)の 2 つのコンポーネントが含まれます。PromQL は特殊文字 :_ のみをサポートしているため、まず、次の 2 つのルールに従って、この指標名を PromQL との適合させる必要があります。

  • 最初の /: に置き換えます。
  • 他のすべての特殊文字(. と他の / 文字を含む)は _ に置き換えます。

次の表に、指標名と同等の PromQL を示します。

Cloud Monitoring の指標名 PromQL の指標名
kubernetes.io/container/cpu/limit_cores kubernetes_io:container_cpu_limit_cores
compute.googleapis.com/instance/cpu/utilization compute_googleapis_com:instance_cpu_utilization
logging.googleapis.com/log_entry_count logging_googleapis_com:log_entry_count
custom.googleapis.com/opencensus/opencensus.io/
http/server/request_count_by_method
custom_googleapis_com:opencensus_opencensus_io_
http_server_request_count_by_method
agent.googleapis.com/disk/io_time agent_googleapis_com:disk_io_time

Cloud Monitoring の分布指標に対するクエリを行うには、Prometheus ヒストグラムと同様に、指標名に _count_sum_bucket サフィックスを追加して、クエリを実行できます。

Cloud Monitoring の指標名 PromQL の指標名
networking.googleapis.com/vm_flow/rtt networking_googleapis_com:vm_flow_rtt_sum
networking_googleapis_com:vm_flow_rtt_count
networking_googleapis_com:vm_flow_rtt_bucket

モニタリング対象リソースタイプの指定

指標が単一の Cloud Monitoring モニタリング対象リソースタイプにのみ関連付けられている場合、手動でリソースタイプを指定しなくても PromQL クエリは機能します。ただし、一部のシステム指標やログベースの指標によって生成された指標など、Cloud Monitoring 内の一部の指標は複数のリソースタイプにマッピングされています。

モニタリング対象リソースタイプが指標にマッピングされていることを確認するには、次のいずれかを行います。

  1. Google が選んだ指標については、使用可能な指標のリスト(Google Cloud の指標Kubernetes の指標など)をご覧ください。ドキュメント内の各エントリでは、そのタイプの各エントリの最初の列に、関連するモニタリング対象リソースタイプが示されています。モニタリング対象リソースタイプが表示されていない場合は、指標を任意のタイプに関連付けることができます。
  2. Cloud Monitoring の Metrics Explorer の [CONFIGURATION] セクションに移動して、指標名を入力します。有効なリソースタイプのリストが表示されます(「VM インスタンス」など)。指標を選択して [MQL] タブに移動すると、fetch フィールドに基盤となるモニタリング対象リソースタイプ(gce_instance など)が表示されます。この方法は、ログベースの指標、カスタム指標、ユーザー定義指標など、多数のモニタリング対象リソースタイプに関連付けることができる指標に便利です。

指標が複数のリソースタイプに関連付けられている場合は、PromQL クエリでリソースタイプを指定する必要があります。リソースタイプを選択するための特別なラベル monitored_resource があります。

ほとんどの場合、モニタリング対象リソースタイプgce_instance のような短い文字列ですが、monitoring.googleapis.com/MetricIngestionAttribution のように完全な URI として表示されることもあります。整形式のクエリは次のようになります。

  • logging_googleapis_com:byte_count{monitored_resource="k8s_container"}
  • custom_googleapis_com:opencensus_opencensus_io_http_server_request_count_by_method{monitored_resource="global"}
  • loadbalancing_googleapis_com:l3_external_egress_bytes_count{monitored_resource="loadbalancing_googleapis_com_ExternalNetworkLoadBalancerRule"}

monitored_resource ラベルの "" の値は特別なもので、Managed Service for Prometheus 指標に使用されるデフォルトの prometheus_target リソースタイプです。

必要なときに monitored_resource ラベルを使用しない場合、次のようなエラーが表示されます。

「複数のモニタリング対象リソースタイプで使用するように指標が構成されています。シリーズ セレクタは、モニタリング対象リソース名に対してラベル マッチャーを指定する必要があります」

その他のトピック

メタデータ ラベルの使用

PromQL では、他の指標と同様にメタデータ ラベルを使用できますが、指標名と同様に PromQL と互換性を持たせる必要があります。メタデータ システムラベル foo を参照する構文は metadata_system_foo で、メタデータ ユーザーラベル bar の構文は metadata_user_bar です。メタデータ ラベルを使用した正しい形式のクエリは次のようになります。

  • compute_googleapis_com:instance_cpu_utilization{monitored_resource="gce_instance",metadata_user_env="prod"}
  • sum(compute_googleapis_com:instance_cpu_utilization) by (metadata_system_region)

メタデータ ラベルキーで使用できる特殊文字は _ 文字のみです。MULTI_STRING または KEY_VALUE タイプのメタデータ ラベルを使用した集計はサポートされていません。

ラベル競合の解決

Cloud Monitoring では、ラベルは指標またはリソースに属します。指標ラベルのキー名がリソースラベルと同じ場合、クエリのラベルキー名に接頭辞 metric_ を追加することで指標ラベルを参照できます。たとえば、指標 logging.googleapis.com/user/widget_countpod_name という名前のリソースラベルと指標ラベルがある場合、logging_googleapis_com:user_widget_count{pod_name="resource_label_value"} を使用してリソースラベルをフィルタし、logging_googleapis_com:user_widget_count{metric_pod_name="metric_label_value"} を使用して指標ラベルをフィルタできます。

ルールとアラート

Cloud Monitoring の指標は、記録ルールとアラートルールの両方で使用できます。手順については、マネージド ルールの評価とアラートまたはセルフデプロイ ルールの評価とアラートをご覧ください。

PromQL の学習

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

PromQL の違い

Managed Service for Prometheus の PromQL は、アップストリームの PromQL とは若干異なる場合があります。これらの違いの一覧については、PromQL の違いをご覧ください。