IBM Cloud Docs
PromQL の使用

PromQL の使用

Prometheus の時系列メトリック・データを選択して集約するには、Prometheus 照会言語 (PromQL) を使用します。

PromQLについて詳しくは、 オープン・ソースの資料を参照してください。

PromQL 照会の作成

既存のダッシュボード内のメトリックに対する PromQL 照会を作成します。

  1. モニタリング・ダッシュボードで、サービス・インスタンスの 「ダッシュボードを開く」 をクリックします。
  2. **「ダッシュボード」**から、照会するメトリックが含まれるダッシュボードを選択します。
  3. ダッシュボードの 1 つのパネルで、_編集_アイコンをクリックします。
  4. **「PromQL」**照会タイプを選択します。
  5. 照会形式で、_表示_データ (照会名や時系列名など) を入力します。
  6. PromQL 照会 (avg(avg_over_time(host_cpu_used_percent[$__interval])) by(kubernetes_cluster_name)など) を入力します。 照会内の以下のフィールドを指定します。
    • メトリック: host_cpu_used_percent などの、照会するメトリックを指定します。 注: 表内で生成される値は最新のメトリックです。
    • 時刻範囲: 5m などの、時刻範囲または時間間隔を指定します。 UI で選択される時刻範囲を使用するには、$__range を指定します。 UI で選択される時刻範囲に基づく時間間隔を使用するには、$__interval を指定します。 UI 内で時刻範囲が変更されると、この照会内の $__range 変数と $__interval 変数は自動更新されます。 詳しくは、PromQL 照会へのダッシュボードの範囲の適用を参照してください。
    • セグメンテーション (Segmentation): kubernetes_cluster_name などの、集約された PromQL データをセグメント化するための値を選択します。
  7. **「照会の実行」**をクリックします。
  8. 追加の_オプション_ (データが返される単位やデータの表示方法など) を構成して、結果を微調整します。

ダッシュボードの範囲の適用

PromQL 照会からビルドされるパネルの範囲を設定するには、照会内で範囲変数を使用する必要があります。

照会内で指定できる、時刻ベースの範囲の事前定義済みの変数が 2 つあります。 UI 内で下線部分の時刻範囲が変更されると、これらの変数は自動更新されます。

  • $__range: ダッシュボード UI 内で選択される時間フレームを表します。 例えば、この変数を使用して、選択されている時間フレームの平均を計算することもできます。
  • $__interval: ダッシュボード UI 内で選択される、時刻範囲に基づく間隔を表します。 例えば、この変数を使用して、経時的な比率や平均などのさまざまな操作の時刻範囲を調整することもできます。

例えば、以下の照会を使用して、すべてのホストの CPU 使用率を戻すとします。

avg_over_time(host_cpu_used_percent[$__interval])

この照会では $__interval 変数が使用されています。この変数は、表示するデータの範囲を、ダッシュボード UI 内で選択されている時刻範囲に基づく動的な時間間隔に限定します。

照会内で独自の変数を指定して、出力の範囲を限定することもできます。 例えば、前の照会の有効範囲を特定のラベル ( hostname など) に絞り込むには、まず ダッシュボード・レベルで有効範囲変数を定義する必要があります。 その後、照会内でこの変数を指定できます。

avg_over_time(host_cpu_used_percent{host_name=$hostname}[$__interval])

ラベルの使用

PromQL 照会を実行すると、最小限のラベルのセットを付けてデータが戻されます。 クラスター名などのラベルをさらに追加するには、ベクトル突き合わせ操作を使用します。

Prometheus は、値が 1 でラベルが複数ある情報メトリックを返します。情報メトリックのラベルを情報メトリック以外のメトリックに結合すると、アプリケーション全体のメトリックの値などの有用な洞察を得ることができます。 ベクトル突き合わせ操作を使用すると、SQL 結合と同様に、情報のラベルをメトリック・データに追加できます。

例: アプリケーション・メトリックのクラスターでのフィルター処理

この例では、アプリケーションによって戻されるメトリックを、クラスターでフィルター処理します。 PromQL は、範囲内でクラスターが 1 つだけ選択されるようにして、1 つのクラスターを対象にしたメトリックの値を集約します。

sum (myapp_metric * on (container_id) kube_pod_container_info{cluster=$cluster})

この照会は、以下を実行します。

  • kube_pod_container_info ラベルに基づく特定のクラスター (ダッシュボード変数として設定されている $cluster) のみで、かつ特定の時系列で、情報メトリック cluster をフィルタリングします。
  • myapp_metric ラベルの値が同じ場合、非情報メトリック kube_pod_container_info をフィルタリングされた情報メトリック container_id と突き合わせます。 値は乗算されますが、情報メトリックの値が 1 なので、結果は変わりません。 クラスターのラベルが結果のデータに追加されます。
  • myapp_metric 関数を使用して値 sum の時系列を集約し、結果を戻します。

例: 平均 CPU 使用率のアカウントとリージョンでのフィルター処理

この例では、特定の IBM Cloud アカウントとリージョンの平均 CPU 使用率(%)を計算します。

avg by(region,account_id) (host_cpu_used_percent * on (host_mac) group_left(region,account_id) sysdig_cloud_provider_info{account_id=~$account, region=~$region})

この照会は、以下を実行します。

  • sysdig_cloud_provider_info$region のラベルに基づいてダッシュボード変数として設定されている、特定のリージョン ($account) とアカウント (region) のみで、情報メトリック account_id をフィルタリングします。
  • host_cpu_used_percent ラベルの値が同じ場合、非情報メトリック sysdig_cloud_provider_info をフィルタリングされた情報メトリック host_mac と突き合わせます。 値は乗算されますが、情報メトリックの値が 1 なので、結果は変わりません。 リージョンとアカウントのラベルが結果のデータに追加されます。
  • アカウントとリージョン別に新しいメトリックの平均が計算されます。

最新のメトリックを抽出する cURL サンプル

メトリックの最新の値を取得するには、メトリック名のみを指定します。 5 分以内に生成された直近の値が戻されます。

例えば、host_cpu_used_percent の最新の値を取得するには、次のようにします。

curl <SYSDIG_REST_API_ENDPOINT>/prometheus/api/v1/query?query=sysdig_host_cpu_used_percent -H "Authorization: $AUTH_TOKEN" -H "IBMInstanceID: $GUID" -H "SysdigTeamID: $TEAM_ID" -H "content-type: application/json"

説明

  • <SYSDIG_REST_API_ENDPOINT>は、REST API 呼び出しによってターゲットとされるエンドポイントを示します。 詳しくは、モニタリング REST API エンドポイントを参照してください。 例えば、us-south で使用可能なインスタンスのパブリック・エンドポイントは https://us-south.monitoring.cloud.ibm.com/api です。

  • -H を使用して複数のヘッダーを渡すことができます。

    AuthorizationIBMInstanceID は、認証に必要なヘッダーです。

    SysdigTeamID はオプションです。 このヘッダーを指定すると、その要求は、指定したチームで使用できるデータおよびリソースに制限されます。

    AUTH_TOKENGUID を取得する方法については、IAM トークンのヘッダーを参照してください。

すべてのダッシュボードで、PromQL API が完全にサポートされています。 PromQLで可能なことについて詳しくは、 Prometheus の資料を参照してください。