[Prometheus] PromQLを扱う前に知っておいたほうがよい超最低限の知識


目次

概要

PrometheusでPromQLを書く前に、最低限理解しておいたほうがよい用語や知識など。

関連記事

PrometheusとNode ExporterでCPUとメモリとディスクを監視する

Instant vector

時系列データ。

Range vector

現在から過去のある期間におけるInstant vectorの値が集まったデータ。
以下のように[1m]などで指定したデータ。[5m]とすれば5分前までのデータとなる。
その他以下の単位が指定可能。

  • ms - milliseconds
  • s - seconds
  • m - minutes
  • h - hours
  • d - days - assuming a day has always 24h
  • w - weeks - assuming a week has always 7d
  • y - years - assuming a year has always 365d

参考:https://prometheus.io/docs/prometheus/latest/querying/basics/#range-vector-selectors

下記の例は、CPU使用時間の累計を、現在から1分前までさかのぼって取得するPromQL。

利用例
node_cpu_seconds_total[1m]

実際にPrometheusで実行してみる。

4つの数値が表示されているが、15秒ごとにデータをとっているので、1分間だと4つとなる。
4つのデータはそれぞれCPU使用時間の累計@測定日時という意味になる。

データを見てみる。

node_cpu_seconds_total{cpu="0", env="development", instance="example.com:9100", job="node", mode="idle"}

18039154.58 @1623240806.473 => 6.8642065491192(ヶ月)@2021/06/09 21:13:26
18039169.54 @1623240821.473 => 6.8642122416548(ヶ月)@22021/06/09 21:13:41
18039184.5 @1623240836.473  => 6.86421793419(ヶ月)@22021/06/09 21:13:56
18039199.45 @1623240851.473 => 6.8642236229208(ヶ月)@22021/06/09 21:14:11

測定日時
2021/06/09 21:15分頃にこのPromQLを実行したので、測定日時が合っていることを確認できる。

CPU使用時間の累計
PromQLの結果では約6.8ヶ月となっている。

このPrometheusが入っているCentOSサーバーを起動した日は以下のシェルスクリプトで調べると、2020/11/11となっている。

$ date --date=@$(expr `date +%s` - `cut -d "." -f 1 /proc/uptime`)
Wed Nov 11 15:46:02 JST 2020

今日は2021/06/09なので、2020/11/11は約6.8ヶ月前ということで、CPU使用時間の累計も正しいことが確認できる。

rate関数

rate関数は、ある期間の時系列データの1秒あたりの平均増加率を計算する。
参考:https://prometheus.io/docs/prometheus/latest/querying/functions/#rate

以下は、現在から1分前までのCPU使用時間の累計の、1秒あたりの平均増加率を算出するPromQL。

利用例
rate(node_cpu_seconds_total[1m])

先程のRange vectorの例では4つのデータが出力されたが、今回はその4つの平均増加率となるので、1つに集約される。

{cpu="0", env="development", instance="example.com:9100", job="node", mode="idle"}
0.997555555568801

ちなみに、rate関数の他にirate関数というものがあるが、irateは突発的なスパイクなどの観測のみに利用すべきで、アラートなどの用途にはrateを使うべきとのこと。
参考:https://prometheus.io/docs/prometheus/latest/querying/functions/#irate