一、指标类型详解
在可观测的metrics 中定义了以下四种指标类型,每种指标类型都有其特定的设计目的(如下示例以Prometheus为例):
① Counter(计数器)
📌 定义:
-
单调递增的指标,仅用于累加值(不能减少,除非进程重启)。
-
通常用于表示某类事件累计发生次数。
✅ 示例用途:
-
http_requests_total:累计 HTTP 请求数 -
error_count_total:累计错误数 -
jobs_completed_total:累计任务数
📊 PromQL 查询:
rate(http_requests_total[5m]) // 计算每秒请求速率 increase(error_count_total[1h]) // 一小时内增长数量
🧠 最佳实践:
-
始终将后缀加上
_total,例如http_requests_total -
使用
rate()或increase()来处理 Counter 重置(例如重启后的归零) -
避免将值减掉(如 gauge 减一);改用标签或多个 counter 替代
② Gauge(仪表盘值)
📌 定义:
-
可任意增减的值,表示某个瞬时状态。
-
常用于表示某一资源的使用量或状态值。
✅ 示例用途:
-
memory_usage_bytes:当前内存使用量 -
cpu_temperature_celsius:CPU 温度 -
active_sessions:当前活跃连接数
📊 PromQL 查询:
avg_over_time(memory_usage_bytes[5m]) max(active_sessions)
🧠 最佳实践:
-
尽量保持更新频率一致,否则瞬时值意义会偏差
-
避免只采集初始化值或长时间不变的值
-
可用于表示缓存大小、连接池剩余、线程数等
③ Histogram(直方图)
📌 定义:
-
用于分布统计的指标,把观测值放进多个 桶(bucket) 中,记录:
-
每个桶的累计计数
-
所有观测值的总数(
count) -
所有观测值的总和(
sum)
-
✅ 示例用途:
-
http_request_duration_seconds_bucket:请求时延分布 -
payload_size_bytes_bucket:请求体大小分布
📊 PromQL 查询:
histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le))
🧠 最佳实践:
-
使用合理的
bucket划分(避免过细或过宽)
可使用默认值prometheus.DefBuckets(线性增长) -
bucket是 累加的(≤),即le="0.5"表示 ≤0.5 秒的总数 -
用于计算分位数(P95、P99)或绘制延迟热图
-
会产生多个时序(每个 bucket + label),注意 Cardinality(标签维度)控制
④ Summary(摘要)
📌 定义:
-
用于在客户端(应用内部)直接计算分位数(quantile)
-
同时暴露总数(
count)和总和(sum)
✅ 示例用途:
-
http_request_latency_seconds{quantile="0.95"}:本地估算的 P95 延迟 -
job_duration_seconds:任务耗时的摘要分布
📊 PromQL 查询:
http_request_latency_seconds{quantile="0.99"}
🧠 最佳实践:
-
适用于 单实例本地分位估算,但不适合跨实例聚合
-
避免与
histogram_quantile()混用理解 -
通常用于对时间敏感的本地性能指标
-
不推荐用于全局 SLO,使用 Histogram 更易聚合
🛠 二、Java + Micrometer 使用建议(Spring Boot)
Micrometer 是 Spring Boot 的监控抽象层,支持向 Prometheus 推送指标。
@Autowired MeterRegistry registry;
// Counter 示例
Counter requests = registry.counter("http_requests_total", "method", "GET"); requests.increment();
// Gauge 示例(注册时要提供值的 Supplier)
registry.gauge("cache_size", cacheMap, Map::size);
// Histogram 示例
Timer timer = registry.timer("http_request_duration_seconds");
timer.record(() -> { // 执行耗时操作 });
Micrometer 默认将 Timer 类型映射为 Prometheus 的 Histogram,并自动生成 _bucket、_count、_sum 后缀指标。
🧪 三、实际场景推荐
| 场景 | 推荐类型 | 理由说明 |
|---|---|---|
| 统计请求量、任务数、错误数 | Counter | 只增不减,便于速率分析和报警 |
| 监控内存、线程、连接数等资源使用 | Gauge | 快照型状态值,便于展示和阈值报警 |
| 评估延迟分布、响应时间等 | Histogram | 可用 histogram_quantile() 聚合计算 SLO |
| 单点延迟监控(如网关、本地调用) | Summary | 本地估算分位值精度高,但不宜用于多实例场景聚合 |
📚 官方资源推荐
-
Prometheus Metric Types 官方文档 Metric types | Prometheus
-
Micrometer + Prometheus 官方支持 https://micrometer.io/docs/registry/prometheus
49

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



