記錄規則

一致的記錄規則命名方案使人們更容易一眼看出規則的含義。它還可以透過使不正確或毫無意義的計算凸顯出來,從而避免錯誤。

本頁介紹了記錄規則的正確命名規範和聚合方法。

命名

  • 記錄規則應採用 level:metric:operations 的通用形式。
  • level 表示規則輸出的聚合級別和標籤。
  • metric 是指標名稱,除了在使用 rate()irate() 時應從計數器(counter)中去掉 _total 之外,其他均應保持不變。
  • operations 是應用於指標的操作列表,最新操作排在最前面。

保持指標名稱不變可以使人們很容易瞭解指標是什麼,並容易在程式碼庫中找到。

為了保持操作簡潔,如果存在其他操作(如 sum()),則省略 _sum。結合性操作可以合併(例如 min_minmin 相同)。

如果沒有明顯可用的操作,請使用 sum。在透過除法計算比例時,使用 _per_ 分隔指標,並將該操作命名為 ratio

聚合

  • 在對比例進行聚合時,應分別對分子和分母進行聚合,然後相除。

  • 不要計算比例的平均值或平均值的平均值,因為這在統計學上是無效的。

  • 在對 Summary 的 _count_sum 進行聚合並相除以計算平均觀測大小時,將其視為比例處理會很笨拙。相反,應保留不帶 _count_sum 字尾的指標名稱,並將操作中的 rate 替換為 mean。這代表該時間段內的平均觀測大小。

  • 始終使用 without 子句指定你要聚合掉的標籤。這是為了保留所有其他標籤(例如 job),從而避免衝突並提供更有用的指標和告警。

示例

請注意在兩個向量之間的獨立行上使用減少縮排的運算子的縮排風格。為了在 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"})

計算請求失敗率,並將其聚合至 job 級別的失敗率

- 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 子句中的標籤會從輸出指標名稱的 level 中移除。在沒有聚合時,level 總是匹配的。如果情況並非如此,則規則中可能存在錯誤。

本頁內容