Recording rules
一貫した命名規則でrecording rulesを記述すると、ルールが何を意味するのかをすぐに解釈できるようになります。また、不正確または無意味な計算が目立つようになるため、間違いを防ぐことができます。
このページでは、Recording rules の適切な命名規則と集計について説明します。
命名
- Recording rules は、
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 ラベルを持つ、秒あたりのリクエスト数を集計する
- 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_path:request_latency_seconds_count:rate5m{job="myjob"})
集計する場合、without 句のラベルは、入力メトリック名のレベルと比較して、出力メトリック名のレベルから削除されることに注意してください。集計がない場合、レベルは常に一致します。そうでない場合は、ルールの設定ミスがあった可能性が高いです。