deriv 是什么
deriv() 是 PromQL 的时间序列函数,用线性回归计算 Gauge 指标在窗口内的每秒变化速率。它回答的是「变化有多快」,而不是「当前值是多少」:磁盘还剩 40 吉字节未必紧急,但按现在的写入速度 4 天后会满,这就是需要提前处理的问题。适合线性增长场景,如磁盘占用、连接数、队列积压。
基本信息
| 适用函数 | deriv(v range-vector),返回每秒变化量 |
|---|---|
| 输入要求 | Gauge 类指标;Counter 直接用 rate 更合适 |
| 单位 | 每秒,与业务按分钟统计的口径相差 60 倍 |
| 窗口选择 | 常用 30 分钟到 1 小时,兼顾噪声与灵敏度 |
典型使用场景
- 磁盘容量预警:按当前增长速率估算剩余可用天数
- 内存泄漏识别:可用内存持续下降且斜率稳定
- 队列积压监控:消费组积压增长速率持续为正说明消费跟不上
- 连接数膨胀:连接数斜率异常时提前扩容或限流
- 容量趋势报告:按周统计增长率,作为扩容决策输入
用法示例
用法示例
# 可用内存每秒变化(负值表示正在消耗)
deriv(node_memory_MemAvailable_bytes[1h])
# 消费组积压增长速率
deriv(kafka_consumergroup_lag[30m])
# 换算为每小时的变化量,更贴近运维口径
deriv(node_filesystem_avail_bytes{mountpoint="/"}[1h]) * 3600
# 配套判断:斜率持续为负且绝对值稳定,通常在提示缓慢泄漏结果读法
| 结果符号 | 含义 | 处置方向 |
|---|---|---|
| 持续为正 | 指标在增长 | 容量类指标需评估何时触顶 |
| 持续为负 | 指标在下降 | 可用资源下降需排查消耗来源 |
| 在零附近抖动 | 无明显趋势 | 多为正常波动,不宜据此告警 |
| 突变为极大值 | 窗口内出现阶跃 | 多为重启或批量操作,需与变更时间对照 |
窗口长度是最关键的调参项:窗口太短对噪声敏感、告警抖动,窗口太长会掩盖近期加速;先从 30 到 60 分钟起步,再按指标波动特性调整。
deriv 对非线性变化不敏感:业务量有周期性(白天高、夜间低)时,线性回归的斜率会被平均掉,这类指标改用同比基线更合适。