レコーディングルール

一貫性のある命名スキームをレコーディングルールに適用することで、ルールの意味を簡単に理解できます。また、誤った計算や意味のない計算が目立つようになるため、ミスを防ぐことができます。

このページでは、レコーディングルールの適切な命名規則と集計について説明します。

命名

  • レコーディングルールは、一般的にlevel:metric:operationsの形式にする必要があります。
  • levelは、ルールの出力の集計レベルとラベルを表します。
  • metricはメトリック名であり、rate()またはirate()を使用する場合に_totalを取り除く以外は変更しないでください。
  • operationsは、メトリックに適用された操作のリストです(最新の操作が最初に来ます)。

メトリック名を変更せずに保持することで、メトリックが何かを簡単に知ることができ、コードベース内で簡単に検索できます。

操作を簡潔に保つために、sum()などの他の操作がある場合は_sumは省略します。結合的な操作はマージできます(たとえば、min_minminと同じです)。

使用する明らかな操作がない場合は、sumを使用します。除算によって比率を取る場合は、_per_を使用してメトリックを区切り、操作をratioと呼びます。

集計

  • 比率を集計する場合は、分子と分母を個別に集計してから除算します。
  • 比率の平均または平均の平均を取らないでください。統計的に有効ではありません。

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

  • 常に、集計するラベルを指定したwithout句を指定します。これにより、jobなどの他のすべてのラベルが保持され、競合が回避され、より役立つメトリックとアラートが得られます。

演算子を独自の行でインデントを外したスタイルに注目してください。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"})

サマリーから期間全体の平均遅延を計算する

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

このドキュメントはオープンソースです。問題を報告するかプルリクエストを送信して、改善にご協力ください。