狂自私

导航

Grafana-告警-无法使用变量的解决方式

Grafana无法在告警规则中使用仪表盘预定义好的变量,这不方便,不过我后面发现警告规则的设置是可以设置多个查询表达式,然后通过一系列的计算来达到想要的目的的。

比如如下的这个仪表盘,它的作用的展示通过景鸿的北斗通道上送的覆冰装置在线率变化情况:

 

 

查询语句:

SELECT md.hour,COUNT(*)/ ${bd_jh_apn_num} *100 as `每小时在线率` from r_device_monitor_point_all rdmp global join (
SELECT
  toStartOfHour(acquisition_time) as hour,
  device_code
from
  monitordataall
WHERE
  acquisition_time >= (now() - interval 7 day)
  and device_type in('013005','013015')
GROUP by hour,device_code)as md on rdmp.p_devicecode = md.device_code
WHERE rdmp.device_type in('013005','013015') and rdmp.p_state='01' and rdmp.is_cont='T' and rdmp.access_way =4
GROUP by md.hour

使用了bd_jh_apn_num变量,这个变量也是一个语句查询出来的:

查询语句:

SELECT COUNT(*) from r_device_monitor_point_all as rdmpa WHERE rdmpa.device_type in ('013005','013015') and rdmpa.p_state = '01' and rdmpa.is_cont = 'T' and rdmpa.access_way == 4;

这种情况下,要设置在线率降低到80%就发送告警的话,不能直接把仪表盘的查询语句拿去使用,因为grafana不支持使用变量。但是我们可以拆分步骤:

 点击【run query】:

 查询结果就能显示出来,说明查询没有问题,然后我们可以利用grafana提供的表达式(Expressions)功能,来逐步计算:

Expressions有几种类型:

 

 

Math:数学表达式

Reduce:将选定时间范围内的时间序列值聚合为单个值

Resample:将时间范围重新对齐到一组新的时间戳

Classsic condition:经典条件,检查任何时间序列数据是否符合警报条件,但是应尽可能避免使用

Threshold:检查是否有任何数据符合报警条件。

Expression怎么用还是比较简单的,不需要单独说明,然后就是这么多表达式,grafana如何知道使用哪个值作为报警点呢?就是【set as alert condition】按钮:

 然后在设置其他的一些设置就可以了。

posted on 2025-05-15 13:18  狂自私  阅读(225)  评论(0)    收藏  举报