記録ルール
記録ルールの一貫した命名スキームは、ルールの意味を一目で解釈しやすくします。また、不正確または意味のない計算を目立たせることで、間違いを回避します。
このページでは、記録ルールの適切な命名規則と集計について説明します。
命名
- 記録ルールは、
level:metric:operations
の一般的な形式である必要があります。 level
は、ルール出力の集計レベルとラベルを表します。metric
はメトリック名であり、rate()
またはirate()
を使用する場合、カウンターから_total
を削除する以外は変更されません。operations
は、メトリックに適用された操作のリストであり、最新の操作が最初になります。
メトリック名を変更しないことで、メトリックが何であるかを簡単に把握し、コードベースで簡単に見つけることができます。
操作をクリーンに保つために、sum()
のように他の操作がある場合は_sum
は省略されます。結合操作はマージできます(例:min_min
はmin
と同じです)。
使用する明確な操作がない場合は、sum
を使用します。除算で比率を計算する場合は、メトリックを_per_
で区切り、操作をratio
と呼びます。
集計
-
比率を集計する場合は、分子と分母を個別に集計してから除算します。
-
比率の平均や平均の平均を取ることは、統計的に有効ではないため行わないでください。
-
Summaryの
_count
と_sum
を集計し、除算して平均観測サイズを計算する場合、それを比率として扱うのは扱いにくいでしょう。代わりに、_count
または_sum
サフィックスなしでメトリック名を保持し、操作のrate
をmean
に置き換えます。これは、その期間の平均観測サイズを表します。 -
集計するラベルを常に
without
句で指定してください。これは、job
などの他のすべてのラベルを保持するためであり、競合を回避し、より有用なメトリックとアラートを提供します。
例
2つのベクトル間に独自の行でアウトデントされた演算子を持つインデントスタイルに注目してください。このスタイルをYamlで可能にするために、インデントインジケーター付きのブロック引用符(例:|2
)が使用されます。
path
ラベルを持つ1秒あたりのリクエストを集計する
- record: instance_path:requests:rate5m
expr: rate(requests_total{job="myjob"}[5m])
- record: path:requests:rate5m
expr: sum without (instance)(instance_path:requests:rate5m{job="myjob"})
リクエスト失敗率を計算し、ジョブレベルの失敗率に集計する
- record: instance_path:request_failures:rate5m
expr: rate(request_failures_total{job="myjob"}[5m])
- record: instance_path:request_failures_per_requests:ratio_rate5m
expr: |2
instance_path:request_failures:rate5m{job="myjob"}
/
instance_path:requests:rate5m{job="myjob"}
# Aggregate up numerator and denominator, then divide to get path-level ratio.
- record: path:request_failures_per_requests:ratio_rate5m
expr: |2
sum without (instance)(instance_path:request_failures:rate5m{job="myjob"})
/
sum without (instance)(instance_path:requests:rate5m{job="myjob"})
# No labels left from instrumentation or distinguishing instances,
# so we use 'job' as the level.
- record: job:request_failures_per_requests:ratio_rate5m
expr: |2
sum without (instance, path)(instance_path:request_failures:rate5m{job="myjob"})
/
sum without (instance, path)(instance_path:requests:rate5m{job="myjob"})
Summaryから一定期間の平均レイテンシを計算する
- record: instance_path:request_latency_seconds_count:rate5m
expr: rate(request_latency_seconds_count{job="myjob"}[5m])
- record: instance_path:request_latency_seconds_sum:rate5m
expr: rate(request_latency_seconds_sum{job="myjob"}[5m])
- record: instance_path:request_latency_seconds:mean5m
expr: |2
instance_path:request_latency_seconds_sum:rate5m{job="myjob"}
/
instance_path:request_latency_seconds_count:rate5m{job="myjob"}
# Aggregate up numerator and denominator, then divide.
- record: path:request_latency_seconds:mean5m
expr: |2
sum without (instance)(instance_path:request_latency_seconds_sum:rate5m{job="myjob"})
/
sum without (instance)(instance_path:request_latency_seconds_count:rate5m{job="myjob"})
インスタンスとパス全体で平均クエリレートを計算するには、avg()
関数を使用します。
- record: job:request_latency_seconds_count:avg_rate5m
expr: avg without (instance, path)(instance:request_latency_seconds_count:rate5m{job="myjob"})
集計するときは、without
句のラベルが入力メトリック名と比較して出力メトリック名のレベルから削除されることに注意してください。集計がない場合、レベルは常に一致します。そうでない場合、ルールに間違いがある可能性があります。