如何在PromQL中根据Grafana变量实现条件除法运算?
PromQL动态切换除数(基于Grafana变量)
你的问题是要根据Grafana变量$subsystem的取值(K或L),给node_cpu_seconds_total设置不同的除数——K用4,L用20。之前的写法失效是因为PromQL里的and/or是针对时间序列的逻辑运算符,不是用来做数值分支判断的,所以没法直接这么用。
下面是两种可行的解决方法:
方法1:用if函数(推荐,需Prometheus 2.27及以上)
if函数是PromQL专门用来处理条件分支的,写法简洁直观:
node_cpu_seconds_total / if($subsystem == "K", 4, 20)
方法2:兼容低版本Prometheus的写法
利用PromQL中布尔值转数值的特性:true对应1,false对应0。通过条件判断生成对应权重的数值,相加后得到目标除数:
node_cpu_seconds_total / (4 * ($subsystem == "K") + 20 * ($subsystem == "L"))
逻辑很简单:当$subsystem是K时,($subsystem == "K")返回1,另一项为0,最终除数是4;当是L时则反过来,除数为20。
你可以在Grafana查询编辑器里切换$subsystem的值,验证结果是否符合预期。
内容的提问来源于stack exchange,提问作者MOnsDaR
相关产品推荐
相关产品推荐

