記録ルール

記録ルールの一貫した命名スキームは、ルールの意味を一目で解釈しやすくします。また、不正確または意味のない計算を目立たせることで、間違いを回避します。

このページでは、記録ルールの適切な命名規則と集計について説明します。

命名

  • 記録ルールは、level:metric:operationsの一般的な形式である必要があります。
  • levelは、ルール出力の集計レベルとラベルを表します。
  • metricはメトリック名であり、rate()またはirate()を使用する場合、カウンターから_totalを削除する以外は変更されません。
  • operationsは、メトリックに適用された操作のリストであり、最新の操作が最初になります。

メトリック名を変更しないことで、メトリックが何であるかを簡単に把握し、コードベースで簡単に見つけることができます。

操作をクリーンに保つために、sum()のように他の操作がある場合は_sumは省略されます。結合操作はマージできます(例:min_minminと同じです)。

使用する明確な操作がない場合は、sumを使用します。除算で比率を計算する場合は、メトリックを_per_で区切り、操作をratioと呼びます。

集計

  • 比率を集計する場合は、分子と分母を個別に集計してから除算します。

  • 比率の平均や平均の平均を取ることは、統計的に有効ではないため行わないでください。

  • Summaryの_count_sumを集計し、除算して平均観測サイズを計算する場合、それを比率として扱うのは扱いにくいでしょう。代わりに、_countまたは_sumサフィックスなしでメトリック名を保持し、操作のratemeanに置き換えます。これは、その期間の平均観測サイズを表します。

  • 集計するラベルを常に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句のラベルが入力メトリック名と比較して出力メトリック名のレベルから削除されることに注意してください。集計がない場合、レベルは常に一致します。そうでない場合、ルールに間違いがある可能性があります。

このページの内容