Zabbix5系列-钉钉告警-Webhook
一、参考
- Zabbix5系列
- Zabbix5专栏
- Centos7安装Docker
- Centos8安装Docker
- Debian10安装Docker
- Zabbix5系列-Docker安装zabbix5.4 (一)
- Zabbix5系列-监控华为、H3C交换机(snmpv2c/snmpv3/snmptrap) (二)
- Zabbix5系列-监控Windows主机 (三)
- Zabbix5系列-监控Linux主机 (四)
- Zabbix5系列-Linux/Windows磁盘SMART监控 (五)
- Zabbix5系列-监控惠普服务器iLO管理口 (六)
- Zabbix5系列-监控海康威视摄像头 (七)
- Zabbix5系列-使用SNMP监控Linux (八)
- Zabbix5系列-监控docker (九)
- Zabbix5系列-监控mysql(5.7/5.8/mariadb) (十)
- Zabbix5系列-监控redis (十一)
- Zabbix5系列-监控nginx (十二)
- Zabbix5系列-制作拓扑图 (十三)
- Zabbix5系列-声音告警、邮件告警 (十四)
- Zabbix5系列-钉钉告警 (十五)
- Zabbix5系列-创建自动发现模板 (十六)
- Zabbix5系列-接入Grafana面板 (十七)
- Zabbix5系列-报表工具ZbxTable (十八)
- 用户手册: https://www.zabbix.com/documentation/current/zh/manual
- 官方模板参考: https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates?at=refs%2Fheads%2Frelease%2F5.4
- Zabbix模板库: https://share.zabbix.com
- Zabbix容器: https://hub.docker.com/u/zabbix
- Zabbix Agent下载页: https://www.zabbix.com/cn/download_agents
- MIB浏览器下载: http://www.ireasoning.com/download.shtml
- 华为MIB查询: https://support.huawei.com/mibtoolweb/enterpriseMibInfo/zh
- 华为 VRP V200R021C00SPC100 MIB文件: https://support.huawei.com/enterprise/zh/software/253350229-ESW2000397776
- H3C Comware MIB文件: https://www.h3c.com/cn/d_200905/635750_30003_0.htm
- 华为图标 百度云盘 提取码mzhx: https://pan.baidu.com/s/1S6p96p3gNrv78Z2yJxrhaQ
- zabbix报表工具: https://zbxtable.cactifans.com/
- Grafana面板: https://grafana.com/docs/grafana/latest/installation/docker/
- Grafana-cn面板: https://hub.docker.com/r/w958660278/grafana-cn
二 、配置钉钉群机器人
2.1 点击群的设置按钮
2.2 点击智能群助手
2.3 点击添加机器人
2.4 点添加
2.5 选择自定义机器人
2.6 点添加
2.7 配置名称和安全设置 具体安全设置参考 自定义机器人安全设置
2.8 记录下webhook地址
三、创建报警媒介类型
3.1 管理 - 报警媒介类型 - 创建媒体类型
3.2 配置媒介参数
Webhook脚本:
var Ding = {
url: null, //带access_token的URL
at_all: true, //是否@所有人
title: null, //标题
message: null, //消息内容
user_info: null, //@的用户
proxy: null, //代理
sendMessage: function(){
// 提交数据
var params = {
msgtype: 'markdown',
markdown: {
title: Ding.title,
text: Ding.message
},
at: {
atMobiles: [
Ding.user_info,
],
isAtAll: Ding.at_all
}
},
data, //格式化后的提交数据
response, //响应对象
request = new HttpRequest(); //新建http请求
if(Ding.proxy){ //判断代理
request.setProxy(Ding.proxy);
}
request.addHeader('Content-Type: application/json; charset=UTF-8'); //添加http头
// 格式化数据
data = JSON.stringify(params);
Zabbix.log(4, "url: " + Ding.url);
Zabbix.log(4, "params: " + data);
response = request.post(Ding.url, data); //发送请求
Zabbix.log(4, "http code: " + request.getStatus());
// 格式化响应
try{
response = JSON.parse(response);
}catch(error){
response = null;
}
// 判断http响应是否为200 钉钉服务器响应是否无错误
if(request.getStatus() !== 200 || response.errcode !== 0){
if(typeof response.errmsg === "string"){
Zabbix.log(4, "error: " + JSON.stringify(response));
throw JSON.stringify(response);
}else{
throw "unknown error.";
}
}
},
};
try{
var params = JSON.parse(value); //格式化脚本参数
if(typeof params.URL === "undefined"){ //验证URL参数
throw 'parameter "URL" is missing';
}
if(typeof params.To === "undefined"){ //验证To参数
throw 'parameter "To" is missing';
}
if(typeof params.Message === "undefined"){ //验证Message参数
throw 'parameter "Message" is missing';
}
if(typeof params.Subject === "undefined"){ //验证Subject参数
throw 'parameter "Message" is missing';
}
// 验证All参数 判断是否@所有人
if(params.All){
Ding.at_all = true;
}else{
Ding.at_all = false;
}
// 验证代理 是否添加代理
if(params.HTTPProxy){
Ding.proxy = params.HTTPProxy;
}
// 参数赋值
Ding.url = params.URL;
Ding.message = params.Message;
Ding.user_info = params.To;
Ding.title = params.Subject;
// 发送请求
Ding.sendMessage();
return "OK";
}catch(error){
Zabbix.log(4, "sending failed: " + error);
throw "sending failed: " + error + ".";
}
3.3 切换到Message templates页 添加消息模板
3.4 添加告警消息模板
宏定义参考:Zabbix5.4宏参考
机器人markdown格式等参考:钉钉开放文档 - 自定义机器人接入
主题:
收到告警
消息:
注意:如果安全验证使用关键字模式 保证消息内容里包含关键字
注意:markdown格式每行结尾添加2个空格 否则不会换行
## <font color=#FF0000>收到告警@{EVENT.TIME}</font>
> <font color=#FF0000> **告警主机:** {HOST.NAME}</font>
> <font color=#FF0000> **告警级别:** {TRIGGER.SEVERITY}</font>
> <font color=#FF0000> **告警事件:** {TRIGGER.NAME}</font>
- **主机位置:** {INVENTORY.LOCATION}
- **IP 地址:** [{HOST.IP}](http://{HOST.IP} )
- **告警时间:** {EVENT.DATE} {EVENT.TIME}
- **告警数值:** {ITEM.LASTVALUE}
- **操作数据:** {EVENT.OPDATA}
- **事件编号:** {EVENT.ID}
- **实时信息:** [点击查看]({INVENTORY.URL.A1})
3.5 添加告警恢复模板
主题:
告警恢复
消息:
注意:如果安全验证使用关键字模式 保证消息内容里包含关键字
注意:markdown格式每行结尾添加2个空格 否则不会换行
## <font color=#00E080>告警恢复@{EVENT.TIME}</font>
> <font color=#00E080> **告警主机:** {HOST.NAME}</font>
> <font color=#00E080> **告警级别:** {TRIGGER.SEVERITY}</font>
> <font color=#00E080> **告警事件:** {TRIGGER.NAME}</font>
> <font color=#00E080> **持续时间:** {EVENT.DURATION}</font>
- **主机位置:** {INVENTORY.LOCATION}
- **IP 地址:** [{HOST.IP}](http://{HOST.IP} )
- **告警时间:** {EVENT.DATE} {EVENT.TIME}
- **告警数值:** {ITEM.LASTVALUE}
- **事件编号:** {EVENT.ID}
- **实时信息:** [点击查看]({INVENTORY.URL.A1})
四、测试
4.1 点击报警媒介后面的测试按钮
4.2 消息内容输入安全设置关键字 点击测试
4.3 成功收到消息
五、配置钉钉告警
5.1 User settings - Profile - 报警媒介 - 添加
5.2 配置告警(收件人就是钉钉@的手机号)
六、创建动作
6.1 配置 - 动作 - Trigger actions - 创建动作
6.2 输入名称
6.3 切换到操作页 添加告警操作和恢复操作
6.4 告警操作 选择用户组或用户 仅送到钉钉
6.5 恢复操作 选择用户组或用户 仅送到钉钉
6.6 手动shutdown一个接口测试成功