Grafana ALert功能使用webhook,并预警数据信息

时间:2021-08-16 08:49:42

使用webhook预警的时候如果能够同时获取预警的数据信息是最好不过的,这里我们就来看下怎么获取这些东西。

数据源依然选用InfluxDB,具体配置过程可以参考前边两篇文章,现在从webhook配置开始。

  • 无参对接

在Grafana的Alerting下配置webhook信息:
Grafana ALert功能使用webhook,并预警数据信息

具体参数信息前面有讲过,实际操作的时候也是很容易理解的,这里不在赘述。
但是有一点必须说明,我的Grafana是装在云服务器上的,本机适用的是公司内网ip,所以需要做一个本地ip映射,否则可能send test的时候直接失败。

配置好之后点击send Test可以检测接口是否能調通。

先看接收的接口代码:

    @PostMapping("/getTest")
public void alertTest(@RequestBody String body){
System.out.println("this is getTest");

}

因为现在Grafana的webhook只支持POST和PUT方法,这里我选用的是POST。

点击Send Test按钮,查看控制台信息:
Grafana ALert功能使用webhook,并预警数据信息

可以看到接口是通了,如果调用失败就确认下是否内外网端口映射问题。

  • 静态参数

即使使用POST方式也是可以在url中加参数的,因为这里的配置只有URL供我们操作,所以我们先把参数放到url中。

将webhook的配置修改如下:
Grafana ALert功能使用webhook,并预警数据信息

代码及测试结果如下:
Grafana ALert功能使用webhook,并预警数据信息

这里可以看到数据被正常接收到。

  • 报警信息数据

一般来说触发预警的信息才是我们最想要获取的数据,现在我们来看这块数据的获取。
webhook中url里有参无参都可。

建立dashboard以及graph数据设定,如果不熟悉的同学可以参考前面两篇博文。

首先设置Metrics,显示数据信息:
Grafana ALert功能使用webhook,并预警数据信息

Alert设置

Alert Config:这里设置好条件,使得能够满足预警触发。
Grafana ALert功能使用webhook,并预警数据信息

Notifications:
Grafana ALert功能使用webhook,并预警数据信息

代码修改如下:

    @PostMapping("/getTest")
public void alertTest(@RequestBody String body){

System.out.println("this is getTest");

System.out.println("body:"+body);
}

这里我是使用body来接收数据的。

在Alert Config中测试:
Grafana ALert功能使用webhook,并预警数据信息

上边query中的时间范围我设置成1h以便能获取到数据。

控制台输出信息(body信息我转成了json格式):

this is getTest
body:{
"ruleName": "webhooktest",
"state": "alerting",
"message": "This is my webhook send test ,my target is to get the alert data.",
"ruleId": 4,
"title": "[Alerting] webhooktest",
"ruleUrl": "http://localhost:3000/dashboard/db/webhookdatatest?fullscreen&edit&tab=alert&panelId=1&orgId=1",
"evalMatches": [
{
"metric": "mytest.age",
"value": 25,
"tags": null
}
]
}

因为这里的触发都是field,所以接收的数据是mytest.age的值。

  • 多曲线数据收集

更改metrics信息如下:

Grafana ALert功能使用webhook,并预警数据信息

现在Graph由单线改为了多线,这样触发的时候极有可能是多条线都触发报警,也可能是单独一个触发的,这里我们看下多线同时触发的。

将触发点修改,使得其中三条线触发,最下边一条不触发(如果没有成功,试着先保存下修改):

控制台信息:

this is getTest
body:{
"ruleName": "webhooktest",
"state": "alerting",
"message": "This is my webhook send test ,my target is to get the alert data.",
"ruleId": 4,
"title": "[Alerting] webhooktest",
"ruleUrl": "http://localhost:3000/dashboard/db/webhookdatatest?fullscreen&edit&tab=alert&panelId=1&orgId=1",
"evalMatches": [
{
"metric": "mytest.age { myName: pangkun2 }",
"value": 27,
"tags": null
},
{
"metric": "mytest.age { myName: pangkun3 }",
"value": 26,
"tags": null
}
]
}

这上面只是显示了其中两条线的触发,pangkun1这条线的数据并没有发送出来。

因为这里比较的是最小值,pangkun1这条线最后一个点的值低于了预警值,所以被视为OK的。