clamp 系列干什么
clamp_max、clamp_min 与 clamp 把查询结果限制在指定区间内:clamp_max 设上界,clamp_min 设下界,clamp 同时设上下界。常见用途有两个,一是压制异常尖峰对图表坐标轴的影响,二是把抖动产生的负值归零让曲线更易读。它们只改变返回数值,不改变底层数据。
用法示例
用法示例
# 展示时压制超过 100 的异常尖峰
clamp_max(some_gauge, 100)
# 把抖动的导数归零到非负区间
clamp_min(deriv(connection_count[5m]), 0)
# 同时限定上下界:低于 0 记 0,高于 50 记 50
clamp(node_load1, 0, 50)
# 百分比边界保护:使用率不超过 100
clamp_max(100 * used / total, 100)函数对照
| 函数 | 作用 | 典型用途 |
|---|---|---|
| clamp_max | 逐样本取不超过上限的值 | 压尖峰、防坐标轴被单点拉爆 |
| clamp_min | 逐样本取不低于下限的值 | 负值归零、导数下限保护 |
| clamp | 同时限定上下界 | 百分比越界保护、显式区间约束 |
| min / max 聚合 | 跨序列取最小或最大值 | 对比不同实例之间的极值 |
截断只影响展示值,不改变真实数据;告警判定不要使用截断后的表达式,否则超阈值的异常会被静默抹平。
如果尖峰本身就是需要关注的信号(例如 GC 停顿或连接突增),截断会让问题从图上看不见,先确认压制的目的。
使用注意
- 只作用于瞬时向量:区间向量与标量不能直接传入,需要先聚合出瞬时值
- 上下界要来自业务定义(例如容量就是 100%),而不是随手取的整数
- 与 topk、sort 组合时先截断再排序,图表的顺序与显示数值才一致
- 在记录规则里保留原始指标,只在展示层做截断,原始与可读两头都不丢
排查曲线上限恒定时,先确认面板或记录规则里是否有人加了 clamp,这类“数值太完美”往往不是真实数据。
clamp 的参数顺序是 clamp(向量, 下界, 上界),写反会把上下界互换,图上未必明显但数值语义已经完全错了。