小姐姐教你写webhook搭配grafana告警详解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小姐姐教你写webhook搭配grafana告警详解相关的知识,希望对你有一定的参考价值。
一、什么是webhook
1. webhook简介
用过Jenkins自动化构建项目的流程都知道,当git push之后,git的webhook机制便会发出请求,向Jenkins服务器通知开始执行构建流程。
Webhooks可以理解为满足特定的事件触发时(例如git push代码后,或者grafana触发告警),源网站发起一个HTTP请求到webhook配置的URL。webhook收到请求后进行相对应的处理(比如Jenkins自动构建项目,或者转发grafana告警)。
概括来说,就是在一个系统触发事件后,另一个系统收到请求并处理相应的任务,而收到请求并处理的部分便是webhook
2.grafana使用webhook场景
虽然grafana内置了非常丰富的告警媒介(例如邮箱、钉钉、slack、Prometheus Alertmanager等)具体参考官方文档:https://grafana.com/docs/grafana/latest/alerting/notifications/。
但是如果需求是收到grafana告警后执行一系列的其他操作,此时内置的告警媒介便不能满足需求,例如在企业内部已有告警平台接口,实现了告警分级通知,分组通知等功能。但是grafana告警事件与现有的告警平台接口并不能直接对接,因为grafana告警输出格式与告警平台接入格式并不匹配。此时就要用到webhook充当中间人角色,收到grafana告警内容后做一系列处理工作,转换为告警接口要求的请求格式,从而实现告警触发。
image.png
二、webhook程序编写
1. 需求分析
webhook程序功能很简单,就是运行一个监听端口的服务。当webhook收到grafana的请求后,获取到request的body内容,进行一系列的处理后,返回给grafana一个正常的response。
2. 示例程序
此处使用python的flask框架开启一个webhook服务为例
from flask import Flask, request
from log import logger
app = Flask(__name__)
@app.route(/, methods=["POST"])
def index():
req = request.json
print(req)
return success!
if __name__ == __main__:
app.run(debug=True)
三、webhook配置
1. 点击添加告警通知
image.png
2. 添加webhook通知配置
image.png
3. 点击test发送测试告警,查看flask程序控制台是否打印请求内容
image.png
四、grafana告警配置
grafana暂只支持对graph类型图表添加告警
1. 进⼊编辑模式后,选择 Alert 选项卡,创建告警
image.png
2. 设置告警规则
image.png
- name:告警名称
- eval(231, 243, 237); padding: 0px 3px; border-radius: 4px; overflow-wrap: break-word; text-indent: 0px;">30s,
3m
, 5m
or 1h
) - for:在触发告警前,需要查询多长时间的间隔(当告警满足触发条件,不会立即告警,而是先转为peding,一旦超过for设置的时长,再转为alerting状态)
image.png
3. 设置graph监控的阈值
image.png
- when:聚合操作类型(可以是 avg、max、min、last等)
- of:查询公式Query(A,5m,now)。其中的A是Graph曲线编号,5m表示取开始时间区间,now表示结束时间区间。也可以是(1h,now-50m)
- IS ABOVE:报警的触发阈值了,当⼤于80的时候 就会发出报警
4. 无数据和错误处理
image.png
- If no data or all values are null:如果没有数据或所有值都为空
- If execution error or timeout:如果执行错误或超时
选项 | 介绍 |
No Data | 将警报规则状态设置为无数据 |
Alerting | 将警报规则状态设置为警报 |
Keep Last State | 保持当前的警报规则状态。 |
Ok | 将警报规则状态设置为正常 |
5. 设置报警媒介与内容
image.png
- 从grafana7.4开始,告警内容支持使用模板变量,具体使用参阅官方文档:https://grafana.com/docs/grafana/latest/alerting/add-notification-template/
6. tag设置
image.png
- tag的用途是可以添加一些自定义的key:value。目前支持自定义tag类型为:Prometheus Alertmanager、Webhook
- tag可以配合alertmanager,实现基于标签的告警处理。实现根据告警等级,告警组匹配规则,进行不同的处理。
7. 查看报警信息
- 调整告警阈值,模拟生成告警内容,查看webhook请求信息
dashboardId: 370,
eval(238, 238, 238); opacity: 0.6;">至此,一个简单的webhook基本功能就实现了。接下来根据实际的业务需求,编写相关的逻辑代码即可。
以上是关于小姐姐教你写webhook搭配grafana告警详解的主要内容,如果未能解决你的问题,请参考以下文章
刷小姐姐视频刷累了?教你一招:自动化的刷「快手极速版」的小姐姐视频