PromQL クエリ¶
グラフに PromQL クエリを適用することで、Prometheus データソースから時系列データを抽出・分析し、その結果をグラフに可視化できます。
概要
PromQL は Prometheus のクエリ言語であり、Prometheus データソースから時系列データをクエリ・操作するために使用します。豊富な関数と演算子を提供し、データの集約、フィルタリング、計算、比較をサポートし、データの迅速な抽出と分析を支援します。
クエリを開始する¶
- 「PromQL クエリを追加」をクリックします。
- クエリ方式を選択します。
- クエリを開始します。
クエリ方式¶
詳細については、DQL と他のクエリ言語との比較 を参照するか、PromQL をご確認ください。
Range クエリ(範囲クエリ)¶
一定期間の監視データをクエリし、範囲ベクトル(Range Vector)を返します。これは、各時系列の指定期間における複数のサンプル値です。構文には時間範囲を付加する必要があります。
例:
これは、過去5分間の各時点におけるリクエスト総数を返します。
Instant クエリ(即時クエリ)¶
特定の時点の監視データをクエリし、即時ベクトル(Instant Vector)を返します。これは、各時系列のその時点における最新のサンプル値です。
例:
これは、現在時刻においてラベル条件を満たすすべてのリクエスト総数を返します。
時間について
即時クエリ(Instant Query)の場合、即時ベクトルのロジックに基づき、クエリ時には終了時間(endtime)のタイムスタンプのみを使用します。Guanceの様々なユースケースに対応するため、クエリエンジンは受信したデータに基づいてインテリジェントに処理を行います:
-
即時クエリと判断された場合、エンジンは時間範囲(timerange)の終了時間を最終的なクエリタイムスタンプとして使用します。
-
PromQL クエリの時間ウィンドウ(
step)を決定する際は、以下の優先順位に従います:- PromQL で時間ウィンドウが指定されている場合(例:[5m])、そのウィンドウ値を
stepとして使用します。 - ウィンドウが指定されていない場合、時間間隔(
interval)パラメータの有無を確認し、あればintervalをstepとして使用します。 intervalがない場合、時間範囲(timerange)をstepとして使用します。- 上記のいずれも存在しない場合、エンジンはデフォルトで5分(5m)を
stepとして使用します。
- PromQL で時間ウィンドウが指定されている場合(例:[5m])、そのウィンドウ値を
補足:範囲クエリ(Range Query)のstepのデフォルト値はmax(interval, max-point-window)、つまりintervalとmax-point-windowのうち大きい方の値です。
クエリ例¶
例えば、特定のリージョンの同時実行制限器がトリガーされたかどうかを監視し、潜在的なパフォーマンス問題やリソースのボトルネックを早期に発見したい場合。
上記のクエリ文を入力すると、system_concurrent_limiter_current メトリクスの値が0より大きいすべてのデータポイントをフィルタリングし、かつそれらのデータポイントの region ラベル値が #{region} であることを意味します。
region の値が us-west-1 の場合、実際のクエリ文は次のようになります:
このクエリは、region が us-west-1 であり、かつ system_concurrent_limiter_current メトリクスの値が0より大きいすべての時系列データを返します。
文の形式
ラベル値の動的置換:#{region} はプレースホルダーであり、実際のクエリでは具体的な値に置き換える必要があります。
フィルター条件¶
PromQL モードでは、フィルター条件はラベル文字列のマッチングのみをサポートします。システムは自動的に条件に合致するフィルターを PromQL ラベルマッチャーに変換します。
サポートされる変換ルール¶
| フィルター条件 | 変換結果 | 説明 |
|---|---|---|
| 複数の AND 条件 | カンマ区切り | 例:a="1" AND b="2" は a="1", b="2" に変換されます |
| 同一ラベルの複数値 OR | 正規表現マッチ | 例:a="1" OR a="2" は a=~"1\|2" に変換されます |
| 等値マッチ | =、!= |
PromQL の等値マッチに直接変換されます |
| 正規表現マッチ | =~、!~ |
PromQL の正規表現マッチに直接変換されます |
サポートされないフィルター¶
以下のフィルター条件は現在サポートされていません:
-
異なるラベル間の OR
-
数値比較(>、<、>=、<=)
-
関数系フィルター
適用シナリオ¶
PromQL クエリインターフェースの定義には、クエリのデータ処理動作を制御する3つのパラメータがあります。それぞれ interval、timerange、align_time で、その意味は以下の通りです:
フィールド |
説明 |
|---|---|
timerange |
クエリするデータの時間範囲 |
interval |
データポイント間の時間間隔 |
align_time |
値:true、false。interval、timerange パラメータと連動します。値が true の場合、interval の時間間隔に基づいて timerange 範囲を再調整します。一般的なロジックは前方へのオフセットです。 |
