[Prometheus] PromQLの基本メモ
PromQLとは
PromQL (Prometheus Query Language) とは、Prometheusで利用する、データ取得、集約のためのクエリ言語のことです。
データ型
Prometheusで扱うデータの型は以下の4つがあります。(参考: Expression language data types)
ラベルマッチャ
Prometheusはメトリクスにラベルをつけて時系列を保存します。ラベルを指定することで、特定の時系列データを選択することができます。
例えば、http_requests_total がメトリクス名の場合、ラベルenvironmentが"staging"のものだけを選択したい場合、以下のように記載します。
http_requests_total{job="prometheus"}
選択する際には、以下のオペレータを利用できます。
メトリクスの種類
Prometheusで扱うメトリクスは以下の4つがあります。
HistogramとSummaryの違いは、公式ドキュメントの HISTOGRAMS AND SUMMARIES を参照してください。
実際の場面ではレイテンシの計算でHistgramやSummaryが利用されますが、次のリンクの説明が詳しいです。レイテンシーを計算する技術の話
集約
ベクトルを集計する場合は、集計の演算子を利用できます。
例えば、Instant vectorを集約するのに、以下のような集計演算子を利用できます。
例えば、httpリクエストの合計を求める場合は以下のように記載します。
sum(http_requests_total)
参考: Prometheus ~ Aggregation operator
関数
時系列に対して様々な処理を行う関数が存在します。
関数はinstant vectorかrange vectorのどちらかを受け取ります。どちらを受け取るかは、ドキュメントに型として記載されています。
例えば、要素があるか判定を行う absent(v instant-vector) は、instant-vectorを受け取り、ある範囲で要素があるか判定を行う absent_over_time(v range-vector) は、range-vectorを受け取ります。
例えば、exp(v instant-vector) は指数関数を計算します。
他の関数は以下の公式ドキュメントを参照してください。
参考: Prometheus ~ functions
rate / irate関数
rate関数やirate関数を利用すると、1秒間の間にカウンターのメトリクスがどれだけ増加したかを計算することができます。
rate(v range-vector)
動きが遅いカウンターの平均増加率を計算します。
irate(v range-vector)
動きが早いカウンターの瞬間増加率を平均します。極端に値が上下する場合は、rateでは観測できなくなることがあるため、こちらを利用します。
カウンターのリセット対策
カウンターは再起動でリセットしてしまうことがありますが、rateやirateを使う場合は自動的に調整されます。集計演算子を利用する場合は、rateかirateを利用して、カウンターリセットの影響を受けないようにします。
例: sum
sum(rate(http_request_total[5m]))
時系列の集約関数
集約名_over_timeの形式の関数が定義されており、<aggregation>_over_time の形式で時間軸で集約処理を行ってinstant vectorを返却することができます。
参考
最後まで読んでいただきありがとうございます。 他の記事はこちらからどうぞ → https://note.com/sat0b3ee/