
Prometheus 提供了四种核心的指标类型,分别是 Counter(计数器)、Gauge(仪表)、Histogram(直方图)和 Summary(摘要)。这些指标类型在客户端库中有具体的使用说明,允许 API 根据不同类型的指标提供针对性的操作。这些类型在 Prometheus 的协议中有明确区分,然而,Prometheus 服务器并不依赖这些类型信息,而是将所有数据扁平化为无类型的时间序列。将来这一点可能会有所变化。
下面是每种指标类型的详细介绍:
1. Counter(计数器)
概述:
- 定义:计数器是单调递增的累计指标,表示一个仅能增加或在重启时重置为零的值。计数器不可减少,用于表示某个事件发生的次数或某些累计的数值。
- 常见用途:用于表示请求数、错误数、任务完成数等。
注意事项:
- 计数器的值永远不会减少。不要使用计数器来暴露可以减少的值(例如正在运行的进程数),应使用
Gauge。 - 常用于累积的事件计数,记录总数或累计量。
示例:
http_requests_total{method="GET", status="200"} 1024
这个计数器记录了 GET 请求且返回 200 状态码的总数为 1024。
查询示例:
- 计算请求总数:
sum(http_requests_total)
2. Gauge(仪表)
概述:
- 定义:仪表是一种可以增加、减少或保持不变的指标。它表示当前的数值,可以上下浮动,常用于测量某一时刻的状态或度量动态变化的量。
- 常见用途:表示动态数据,如温度、内存使用、磁盘空间、并发请求数等。
注意事项:
- 仪表值可以增加、减少或保持不变。
- 适用于表示系统的当前状态,例如 CPU 使用率、内存占用等。
示例:
memory_usage_bytes{instance="server01"} 2048000000
表示服务器 server01 的内存使用量为 2048 MB。
查询示例:
- 获取当前的内存使用量:
memory_usage_bytes
3. Histogram(直方图)
概述:
- 定义:直方图用于采样观测值(通常是请求持续时间或响应大小),并将它们分配到一个或多个可配置的桶中。它不仅可以记录数据的分布,还提供了所有观测值的总和。
- 常见用途:用于分析请求的延迟分布、响应时间、数据包大小等。
组成:
- 直方图会暴露多个时间序列:
- 观测桶计数器:记录每个桶中的观测数量,格式为
<basename>_bucket{le="<upper inclusive bound>"}。 - 总和:记录所有观测值的总和,格式为
<basename>_sum。 - 计数器:记录观察的事件数量,格式为
<basename>_count(与<basename>_bucket{le="+Inf"}相同)。
- 观测桶计数器:记录每个桶中的观测数量,格式为
注意事项:
- 使用
histogram_quantile()函数来计算直方图的分位数(如 P95、P99)。 - 直方图适合用来计算 Apdex 分数。
- Prometheus v2.40 版本开始提供实验性支持的原生直方图,提供更高的分辨率,性能更优。
示例:
http_request_duration_seconds_bucket{le="0.5", method="GET"} 500
http_request_duration_seconds_bucket{le="1.0", method="GET"} 800
http_request_duration_seconds_bucket{le="2.0", method="GET"} 1000
http_request_duration_seconds_sum{method="GET"} 4000
http_request_duration_seconds_count{method="GET"} 1000
表示 GET 请求的响应时间分布,以及总的响应时间总和和计数。
查询示例:
- 获取 99 百分位的请求响应时间:
histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket[5m])) by (le))
4. Summary(摘要)
概述:
- 定义:摘要类似于直方图,但与直方图不同的是,它在滑动时间窗口内计算可配置的分位数(如 P50、P90、P95、P99 等)。它也提供了总计数和所有观测值的总和。
- 常见用途:用于记录请求的响应时间、延迟分布等统计信息。
组成:
- 摘要会暴露多个时间序列:
- 分位数:记录 φ 分位数(0 ≤ φ ≤ 1)的观测事件,格式为
<basename>{quantile="<φ>"}。 - 总和:记录所有观测值的总和,格式为
<basename>_sum。 - 计数器:记录观察的事件数量,格式为
<basename>_count。
- 分位数:记录 φ 分位数(0 ≤ φ ≤ 1)的观测事件,格式为
注意事项:
- 摘要适用于高效计算百分位数,不需要配置桶。
- 摘要的分位数是实时计算的,适合记录如请求延迟的动态数据。
示例:
http_request_duration_seconds{quantile="0.95", method="GET"} 0.5
http_request_duration_seconds_sum{method="GET"} 1000
http_request_duration_seconds_count{method="GET"} 500
表示 GET 请求的 95 百分位响应时间为 0.5 秒,总响应时间为 1000 秒,共有 500 次请求。
查询示例:
- 获取 95 百分位的响应时间:
http_request_duration_seconds{method="GET", quantile="0.95"}
指标类型总结
| 指标类型 | 特点 | 常见用途 | 示例 |
|---|---|---|---|
| Counter | 仅增不减,表示累计数值。 | 记录事件总数,如请求数、错误数、任务完成数。 | http_requests_total(HTTP 请求总数) |
| Gauge | 值可以增加、减少或保持不变。 | 记录动态变化的数据,如温度、内存、并发请求数。 | memory_usage_bytes(内存使用量) |
| Histogram | 记录数据分布,使用桶统计数据。 | 分析数据分布,如请求延迟、响应时间。 | http_request_duration_seconds_bucket(响应时间分布) |
| Summary | 记录统计信息和百分位数,支持滑动时间窗口。 | 计算分位数和统计信息,如请求延迟。 | http_request_duration_seconds(延迟统计) |
- Counter:用于表示累积计数(如请求数、错误数)。
- Gauge:用于表示当前状态的动态数据(如内存、CPU 使用)。
- Histogram 和 Summary:用于处理数据的分布和百分位数,
Histogram更适合用于延迟分布的分析,Summary用于更精确的实时百分位数计算。
了解并合理选择 Prometheus 指标类型是有效监控和数据分析的关键。
801

被折叠的 条评论
为什么被折叠?



