选对指标类型是监控准确的前提:counter用于单调递增的累计计数,须配rate()使用;gauge记录瞬时状态值,可直接查询比较;histogram按桶统计分布,用于延迟等分位数分析。

选对指标类型,监控才不会出错。Counter、Gauge、Histogram 不是随便挑的标签,而是对应不同数学逻辑和采集语义的数据建模方式——用错一个,rate() 就算歪,告警就可能误报。
Counter:只增不减的累计计数器
它记录的是从服务启动(或上次重置)以来某个事件发生的总次数,数值单调递增,正常情况下不会下降。Prometheus 能自动识别重启导致的归零,并在计算时做断点续接。
- 适用场景:HTTP 请求总数、错误发生次数、任务完成数、网络收包总数
- 关键操作:必须配合 rate() 或 increase() 使用,直接查原始值意义有限
- 典型错误:拿 Counter 记录“当前活跃连接数”——这个值会增会减,不是累计量,会导致 rate() 输出负值或跳变异常
Gauge:反映当下状态的瞬时快照
它代表某一时刻的测量值,可升可降,没有累积含义。Prometheus 存储的是带时间戳的点值,适合直接绘图或做阈值判断。
- 适用场景:内存使用量、CPU 使用率、队列长度、温度读数、在线用户数
- 关键操作:可直接查询、比较、做四则运算,比如 (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100
- 典型错误:用 Gauge 存“累计失败次数”,再套 rate() 算失败率——本质是把瞬时值当增量用,结果完全失真
Histogram:按桶分组的分布统计器
它不存单个样本,而是把每次观测值(如请求耗时)落入预设区间(le="0.1"、le="0.5"…),并分别统计各桶内样本数。最终生成三个配套序列:_bucket、_count、_sum。
- 适用场景:接口响应延迟、请求体大小、处理耗时等需要看分布的指标
- 关键操作:用 histogram_quantile(0.99, ...) 算 P99 延迟;用 rate(..._bucket[5m]) 配合 quantile 函数推算分位数变化趋势
- 注意点:分位数计算依赖客户端打点精度(桶边界设置)和 PromQL 聚合方式,不能直接用 raw _bucket 值做简单除法











