クエリ例
簡単な時系列選択
メトリック`http_requests_total`を持つすべての時系列を返す
http_requests_total
メトリック`http_requests_total`と、指定された`job`および`handler`ラベルを持つすべての時系列を返す
http_requests_total{job="apiserver", handler="/api/comments"}
同じベクトルについて、時間の全範囲(この場合はクエリ時間まで5分間)を返します。これにより、範囲ベクトルになります。
http_requests_total{job="apiserver", handler="/api/comments"}[5m]
範囲ベクトルを生成する式は直接グラフ化できませんが、式ブラウザの表形式(「コンソール」)ビューで表示できます。
正規表現を使用すると、特定のパターン(この場合は`server`で終わるすべてのジョブ)に一致する名前を持つジョブの時系列のみを選択できます。
http_requests_total{job=~".*server"}
4xx以外のすべてのHTTPステータスコードを選択するには、以下を実行します。
http_requests_total{status!~"4.."}
サブクエリ
過去30分間の`http_requests_total`メトリックの5分間のレートを1分間の解像度で返します。
rate(http_requests_total[5m])[30m:1m]
これはネストされたサブクエリの例です。`deriv`関数のサブクエリはデフォルトの解像度を使用します。不要なサブクエリの使用は賢明ではありません。
max_over_time(deriv(rate(distance_covered_total[5s])[30s:5s])[10m:])
関数、演算子などの使用
過去5分間で測定された、メトリック名`http_requests_total`を持つすべての時系列の1秒あたりのレートを返します
rate(http_requests_total[5m])
`http_requests_total`の時系列がすべて`job`(ジョブ名で分割)と`instance`(ジョブのインスタンスで分割)のラベルを持っていると仮定すると、すべてのインスタンスのレートを合計して、出力時系列の数を減らしつつ`job`ディメンションを保持したい場合があります。
sum by (job) (
rate(http_requests_total[5m])
)
同じ次元ラベルを持つ2つの異なるメトリックがある場合、それらに二項演算子を適用することができ、同じラベルセットを持つ両側の要素が照合され、出力に伝播されます。例えば、この式は、インスタンスごとの未使用メモリをMiBで返します(架空のクラスタスケジューラが実行中のインスタンスに関するこれらのメトリックを公開していると仮定した場合)。
(instance_memory_limit_bytes - instance_memory_usage_bytes) / 1024 / 1024
同じ式をアプリケーションごとに合計すると、次のようになります。
sum by (app, proc) (
instance_memory_limit_bytes - instance_memory_usage_bytes
) / 1024 / 1024
同じ架空のクラスタスケジューラが、すべてのインスタンスについて次のようなCPU使用率メトリックを公開した場合
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"}
...
...アプリケーション(`app`)とプロセスタイプ(`proc`)でグループ化された上位3つのCPUユーザーを次のように取得できます。
topk(3, sum by (app, proc) (rate(instance_cpu_time_ns[5m])))
このメトリックが実行中のインスタンスごとに1つの時系列を含んでいると仮定すると、アプリケーションごとの実行中のインスタンスの数を次のように数えることができます。
count by (app) (instance_cpu_time_ns)
メトリックのラベルを調べて、例えばその一部をまとめて集計できるようにしたい場合は、次のように使用できます。
limitk(10, app_foo_metric_bar)
あるいは、返される時系列がより均等にサンプリングされるようにしたい場合は、約10%を取得するために以下を使用できます。
limit_ratio(0.1, app_foo_metric_bar)