目次
概要
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]
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