クエリの例
単純な時系列選択
メトリック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を持つすべての時系列の毎秒レートを返します。
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)