如何对Prometheus相乘后的时间序列使用rate函数?(Grafana场景)
解决PromQL语法错误的正确写法
错误原因
PromQL的rate()函数仅支持直接接收带时间范围的指标选择器(即metric[range]形式的范围向量),不能对两个指标运算后的表达式直接添加时间范围,这就是触发语法错误的核心原因。
正确写法
利用PromQL的子查询特性,先完成两个指标的乘法运算,再将运算结果转换为范围向量供rate()处理:
1. 标签完全匹配时的基础写法
rate((mysql_global_status_wsrep_flow_control_paused * mysql_global_status_uptime_since_flush_status)[$__rate_interval:])
- 子查询格式
(expr)[range:]会先计算指标乘积在$__rate_interval时间范围内的瞬时值序列,生成合法的范围向量 - 冒号后省略的采样间隔会默认使用Prometheus全局评估间隔
2. 标签不完全匹配时的写法
如果两个指标的标签集存在差异,需用on()或ignoring()指定匹配标签(比如按instance和job匹配):
rate((mysql_global_status_wsrep_flow_control_paused * on(instance, job) mysql_global_status_uptime_since_flush_status)[$__rate_interval:])
3. 更灵敏的瞬时变化率写法
若需要更灵敏的瞬时变化率,可将rate()替换为irate():
irate((mysql_global_status_wsrep_flow_control_paused * mysql_global_status_uptime_since_flush_status)[$__rate_interval:])
内容的提问来源于stack exchange,提问作者ProudOne
相关产品推荐
相关产品推荐

