14.6从Metrics到KPI

分类: KPI 定义和量化指标

从 Metrics 到 KPI

欢迎回到第 14 章的学习。在上一节,我们学习了从 Traces 到 KPI。现在我们要学习从 Metrics 到 KPI。

本节将学习:指标聚合、时间窗口选择、百分位数计算、以及趋势分析。

指标聚合

从 Metrics 到 KPI 的作用是什么? 从监控指标中提取关键绩效指标,量化系统性能。

指标聚合的作用是什么? 将多个指标聚合为单一 KPI,简化监控和决策。

如何进行指标聚合? 使用聚合函数:

  • sum:求和
  • avg:平均值
  • max:最大值
  • min:最小值
  • count:计数

PromQL 聚合示例:

# 求和:总请求数
sum(http_requests_total)

# 平均值:平均响应时间
avg(http_request_duration_seconds)

# 最大值:最大响应时间
max(http_request_duration_seconds)

# 最小值:最小响应时间
min(http_request_duration_seconds)

# 计数:服务数量
count(http_requests_total) by (service)

# 按服务聚合
sum(http_requests_total) by (service)

时间窗口选择

时间窗口选择的作用是什么? 选择合适的时间窗口,平衡实时性和稳定性。

如何选择时间窗口? 根据需求选择:

  • 短期窗口(1m、5m):实时监控
  • 中期窗口(15m、1h):趋势分析
  • 长期窗口(1d、1w):历史对比

时间窗口示例:

# 短期窗口:5 分钟平均
avg_over_time(http_request_duration_seconds[5m])

# 中期窗口:1 小时平均
avg_over_time(http_request_duration_seconds[1h])

# 长期窗口:1 天平均
avg_over_time(http_request_duration_seconds[1d])

# 变化率(5 分钟窗口)
rate(http_requests_total[5m])

# 变化率(15 分钟窗口,更平滑)
rate(http_requests_total[15m])

百分位数计算

百分位数计算的作用是什么? 计算百分位数,更好地反映用户体验。

如何计算百分位数? 使用 PromQL:

  • histogram_quantile(0.50, ...):P50
  • histogram_quantile(0.95, ...):P95
  • histogram_quantile(0.99, ...):P99

百分位数计算示例:

# P50(中位数)
histogram_quantile(0.50, 
  sum(rate(http_request_duration_seconds_bucket[5m])) by (le, service)
)

# P95(95 百分位数)
histogram_quantile(0.95, 
  sum(rate(http_request_duration_seconds_bucket[5m])) by (le, service)
)

# P99(99 百分位数)
histogram_quantile(0.99, 
  sum(rate(http_request_duration_seconds_bucket[5m])) by (le, service)
)

# 多个百分位数对比
histogram_quantile(0.50, sum(rate(http_request_duration_seconds_bucket[5m])) by (le)),
histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le)),
histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket[5m])) by (le))

趋势分析

趋势分析的作用是什么? 分析指标变化趋势,预测未来表现。

如何进行趋势分析? 使用趋势分析函数:

  • rate:变化率
  • increase:增长量
  • delta:差值
  • predict_linear:线性预测

趋势分析示例:

# 变化率(每秒)
rate(http_requests_total[5m])

# 增长量(5 分钟内)
increase(http_requests_total[5m])

# 差值(当前值 - 5 分钟前的值)
delta(http_requests_total[5m])

# 线性预测(预测 1 小时后的值)
predict_linear(http_requests_total[5m], 3600)

# 趋势方向(上升/下降)
rate(http_requests_total[5m]) > 0

本节小结

在本节中,我们学习了从 Metrics 到 KPI:

第一个是指标聚合。 将多个指标聚合为单一 KPI,简化监控和决策。

第二个是时间窗口选择。 选择合适的时间窗口,平衡实时性和稳定性。

第三个是百分位数计算。 计算百分位数,更好地反映用户体验。

第四个是趋势分析。 分析指标变化趋势,预测未来表现。

从 Metrics 到 KPI 流程: 收集 Metrics → 指标聚合 → 时间窗口选择 → 百分位数计算 → 趋势分析 → 映射 KPI。

这就是从 Metrics 到 KPI。通过从 Metrics 到 KPI,我们能够从监控指标中提取关键绩效指标。

在下一节,我们将学习从 Logs 到 KPI。学习如何从 Logs 中提取 KPI。