Prometheusクエリ PromQL チュートリアル

このページはPrometheus公式ドキュメント和訳+αの一部です。

単純な時系列の選択

http_requests_totalメトリックの全ての時系列を返す

http_requests_total

http_requests_totalメトリックでjobhandlerラベルが指定された値であるものを返す

http_requests_total{job="apiserver", handler="/api/comments"}

ある時間幅(ここでは5分)の全ての値をrange vectorにして返す

http_requests_total{job="apiserver", handler="/api/comments"}[5m]

range vectorを返す式は、直接グラフに表示できないが、Consoleで表としてみることができる。

正規表現jobがパターンに合う(ここではserverで終わる)時系列を選択することができる。

http_requests_total{job=~".*server"}

Prometheusの正規表現RE2 syntaxを使う。

HTTPステータスが4xx以外のものを選択する

http_requests_total{status!~"4.."}

関数、演算子など

直近5分のhttp_requests_totalのrate(秒間)を全て返す

rate(http_requests_total[5m])

http_requests_totalには全てjobおよびinstanceラベルがあると仮定して、job軸を残して、instanceのrateを合計する

sum(rate(http_requests_total[5m])) by (job)

同じラベルを持つ二つのメトリクスがある場合、二項演算子を使って、同じラベルを持つ両辺の要素を演算した結果を得ることができる。 この例では、各インスタンスの未使用メモリをMiB単位で返す。

(instance_memory_limit_bytes - instance_memory_usage_bytes) / 1024 / 1024

アプリケーション毎に合計した各インスタンスの未使用メモリは次のように書ける。

sum(
  instance_memory_limit_bytes - instance_memory_usage_bytes
) by (app, proc) / 1024 / 1024

もし、各インスタンスに対してinstance_cpu_time_nsが次のようにexposeされているとすると、

instance_cpu_time_ns{app="lion", proc="web", rev="34d0f99", env="prod", job="cluster-manager"}
instance_cpu_time_ns{app="elephant", proc="worker", rev="34d0f99", env="prod", job="cluster-manager"}
instance_cpu_time_ns{app="turtle", proc="api", rev="4d3a513", env="prod", job="cluster-manager"}
instance_cpu_time_ns{app="fox", proc="widget", rev="4d3a513", env="prod", job="cluster-manager"}
...

CPU利用の多いappprocでグループされた上位3つを取得することができる。

topk(3, sum(rate(instance_cpu_time_ns[5m])) by (app, proc))

参考リンク

和訳活動の支援

Prometheusドキュメント和訳が役に立った方は、以下QRコードからPayPayで活動を支援して頂けるとありがたいです。

PayPayによる支援用QRコード
上のQRコードからPayPayによる支援

入門 Prometheus ―インフラとアプリケーションのパフォーマンスモニタリング

入門 Prometheus ―インフラとアプリケーションのパフォーマンスモニタリング

入門 監視 ―モダンなモニタリングのためのデザインパターン

入門 監視 ―モダンなモニタリングのためのデザインパターン

SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム

SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム