Prometheus 指标类型详解
Prometheus 是一个开源的监控和告警工具,广泛用于收集和存储时间序列数据。为了有效地监控系统,Prometheus 提供了四种核心指标类型:Counter、Gauge、Histogram 和 Summary。每种类型都有其独特的用途和特点。本文将详细介绍这些指标类型,并通过实际案例帮助你理解它们的应用场景。
1. Counter(计数器)
什么是 Counter?
Counter 是一个单调递增的计数器,用于记录累积值。它通常用于表示事件发生的次数,例如 HTTP 请求的总数或错误的总数。Counter 的值只能增加或保持不变(重启时可能重置为 0)。
特点
- 值只能增加或保持不变。
- 适用于记录累积事件。
- 支持
rate()
和increase()
函数,用于计算速率或增量。
示例
假设我们有一个 HTTP 服务器,我们想记录收到的请求总数:
prometheus
http_requests_total{method="GET", endpoint="/api"} 100
http_requests_total{method="POST", endpoint="/api"} 50
使用 rate()
函数计算每秒的请求速率:
prometheus
rate(http_requests_total[1m])
实际应用
- 记录 API 请求总数。
- 监控错误日志的数量。
2. Gauge(仪表盘)
什么是 Gauge?
Gauge 是一个可增可减的指标,用于表示当前状态的瞬时值。它适用于记录可以上下波动的值,例如 CPU 使用率、内存使用量或当前连接数。
特点
- 值可以增加或减少。
- 适用于记录瞬时状态。
- 支持
delta()
和predict_linear()
等函数。
示例
记录当前系统的 CPU 使用率:
prometheus
cpu_usage{instance="server1"} 75.3
cpu_usage{instance="server2"} 60.1
实际应用
- 监控系统的 CPU 和内存使用情况。
- 记录队列中的任务数量。
3. Histogram(直方图)
什么是 Histogram?
Histogram 用于记录数据的分布情况,特别是数值的范围和频率。它将数据划分为多个桶(bucket),并记录每个桶中的事件数量。常用于记录请求延迟或响应大小。
特点
- 将数据划分为多个桶。
- 记录每个桶中的事件数量。
- 支持
histogram_quantile()
函数,用于计算分位数。
示例
记录 HTTP 请求的延迟分布:
prometheus
http_request_duration_seconds_bucket{le="0.1"} 50
http_request_duration_seconds_bucket{le="0.5"} 100
http_request_duration_seconds_bucket{le="1"} 150
http_request_duration_seconds_bucket{le="+Inf"} 200
http_request_duration_seconds_sum 300
http_request_duration_seconds_count 200
计算 90% 的请求延迟:
prometheus
histogram_quantile(0.9, rate(http_request_duration_seconds_bucket[1m]))
实际应用
- 监控 API 请求的延迟分布。
- 记录文件上传的大小分布。
4. Summary(摘要)
什么是 Summary?
Summary 与 Histogram 类似,但它直接计算分位数(例如 50%、90%、99%),而不是通过桶来划分数据。它适用于需要精确分位数的场景。
特点
- 直接计算分位数。
- 适用于精确分位数需求。
- 不支持聚合操作。
示例
记录 HTTP 请求的延迟分位数:
prometheus
http_request_duration_seconds{quantile="0.5"} 0.1
http_request_duration_seconds{quantile="0.9"} 0.5
http_request_duration_seconds{quantile="0.99"} 1.0
http_request_duration_seconds_sum 300
http_request_duration_seconds_count 200
实际应用
- 监控 API 请求的精确延迟分位数。
- 记录任务执行时间的分布。
总结
Prometheus 的四种指标类型各有其独特的用途:
- Counter:用于记录累积事件。
- Gauge:用于记录瞬时状态。
- Histogram:用于记录数据分布。
- Summary:用于记录精确分位数。
选择合适的指标类型可以帮助你更有效地监控系统并生成有意义的告警。
附加资源与练习
资源
练习
- 使用 Counter 记录你的应用程序的错误总数,并计算错误率。
- 使用 Gauge 监控系统的内存使用情况,并设置告警规则。
- 使用 Histogram 记录 API 请求的延迟分布,并计算 95% 分位数。
- 使用 Summary 记录任务执行时间的分位数,并分析性能瓶颈。
通过实践这些练习,你将更好地掌握 Prometheus 的指标类型及其应用场景。