使用webhook预警的时候如果能够同时获取预警的数据信息是最好不过的,这里我们就来看下怎么获取这些东西。
数据源依然选用InfluxDB,具体配置过程可以参考前边两篇文章,现在从webhook配置开始。
- 无参对接
在Grafana的Alerting下配置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按钮,查看控制台信息:
可以看到接口是通了,如果调用失败就确认下是否内外网端口映射问题。
- 静态参数
即使使用POST方式也是可以在url中加参数的,因为这里的配置只有URL供我们操作,所以我们先把参数放到url中。
将webhook的配置修改如下:
代码及测试结果如下:
这里可以看到数据被正常接收到。
- 报警信息数据
一般来说触发预警的信息才是我们最想要获取的数据,现在我们来看这块数据的获取。
webhook中url里有参无参都可。
建立dashboard以及graph数据设定,如果不熟悉的同学可以参考前面两篇博文。
首先设置Metrics,显示数据信息:
Alert设置
Alert Config:这里设置好条件,使得能够满足预警触发。
Notifications:
代码修改如下:
@PostMapping("/getTest")
public void alertTest(@RequestBody String body){
System.out.println("this is getTest");
System.out.println("body:"+body);
}
这里我是使用body来接收数据的。
在Alert Config中测试:
上边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信息如下:
现在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的。