一.简介
zabbix支持多种多种告警方式,常见的有邮件、微信和钉钉机器人告警,当然也支持电话和短信告警。
邮件告警:创建媒介类型(发件人)---报警媒介(收件人)---动作(什么时间发)
企业微信和钉钉告警:zabbix-server采用docker部署后,没有/usr/lib/zabbix/alertscripts/,好像也找不到/etc/zabbix/zabbix_server.conf,这种情况可用webhook的方式,脚本不再是python或bash脚本,是JavaScript脚本。
拓扑图
二.邮件告警 发件人163邮箱为例
创建媒介类型(发件人)---报警媒介(收件人)---动作
0.准备 获取163授权码
1.创建媒介类型
管理---报警媒介类型---创建媒介类型
可以先全部停用,用到哪个开哪个。
报警媒介类型配置
Message templates配置
故障始于 时间: {EVENT.TIME} 日期: {EVENT.DATE}
故障名称: {EVENT.NAME}
故障主机: {HOST.NAME}
严重程度: {EVENT.SEVERITY}
操作时间: {EVENT.OPDATA}
问题起源ID: {EVENT.ID}
触发器地址:{TRIGGER.URL}
故障已解决时间: {EVENT.RECOVERY.TIME} 日期 :{EVENT.RECOVERY.DATE}
故障名称: {EVENT.NAME}
故障持续时间: {EVENT.DURATION}
故障主机: {HOST.NAME}
故障级别: {EVENT.SEVERITY}
故障起源ID: {EVENT.ID}
触发器地址:{TRIGGER.URL}
最后添加
邮箱可用性测试 可筛选已启用的
收件人邮箱填写
2.收件人信息配置
User setting---Profile---报警媒介---添加
类型选刚才创建的邮件类型,收件人可添加多个,什么级别的告警发邮件,添加后更新
3.动作配置
配置---动作---触发器动作Trigger actions
点停用的,来启用
操作的具体设置
操作细节 ,可添加组和用户
最后更新
4.手动制作故障后测试
systemctl stop nginx
systemctl startp nginx
三.钉钉告警
0.用来测试,可以找2个钉钉账号如A和B,A建立组织是管理员,B加入,AB组成一个群聊。
1.创建群聊---添加webhook机器人---测试webhook
添加机器人选webhook机器人
机器人名字自定义
勾选自定义关键词(添加一个写了"Zabbix告警"),告警信息里面有关键字,钉钉机器人才发送消息。
复制webhook的URL
可测试webhook能不能用
curl -H 'Content-Type: application/json' \
-d '{"msgtype":"text","text":{"content":"关键字:Zabbix告警 来自钉钉Zabbix告警机器人消息"}}' \
'https://oapi.dingtalk.com/robot/send?access_token=6e32cacc3029173741807625c18c2d2ec1637bb61d31aaef1c3c6342e1e0f485'
2.创建报警媒介类型
管理---报警媒介类型---创建媒介类型---选Webhook(不要选脚本)
参数只要图中的,删除一个URL
JavaScript脚本
try { // 实例化参数
var params = JSON.parse(value),
req = new HttpRequest(),
msg = {
msgtype: 'text',
text: {
content: params.Subject + '\n' + params.Message
}
},
resp; // 判断是否需要配置HTTP代理
if (params.HTTPProxy) {
req.setProxy(params.HTTPProxy);
} // 添加header头变量
req.addHeader('Content-Type: application/json'); // 发送HTTP Post请求,格式:req.post(url, data)
resp = req.post(params.To,
JSON.stringify(msg)
); // 判断HTTP请求返回的状态码,非200则抛出异常
if (req.getStatus() != 200) {
throw 'Response code: ' + req.getStatus();
} // 返回响应结果
resp = JSON.parse(resp);
return JSON.stringify(resp);
}
catch (error) {
throw 'Failed with error: ' + error;
}
添加消息模板,要包含自定义关键词“Zabbix告警”,不然钉钉不发消息。
消息模板可自定义
故障名称: {EVENT.NAME}
###Zabbix告警###
故障始于 时间: {EVENT.TIME} 日期: {EVENT.DATE}
故障名称: {EVENT.NAME}
故障主机: {HOST.NAME}
严重程度: {EVENT.SEVERITY}
操作时间: {EVENT.OPDATA}
问题起源ID: {EVENT.ID}
触发器地址:{TRIGGER.URL}
测试
刚才添加的问题填写到Subject和Message中,To是机器人webhook的地址。
3.创建动作
配置---动作--出发动作,有一个内置的
操作细节按情况写,一般是分不同的用户组。等下给所选的组包含的用户添加报警媒介。
4.用户添加报警媒介
收件人写webhook的地址,写手机号会报错
Failed with error: Error: cannot get URL: Couldn't resolve host name.
5.手动制作故障后测试
systemc stop nginx
systemctl start nginx
四.企业微信告警
企业微信与钉钉类似,简化步骤
0.创建群,添加机器人
1.创建报警媒介类型
JavaScript脚本
try {
var params = JSON.parse(value),
request = new HttpRequest(),
msg = {
msgtype: 'markdown',
markdown: {
content: params.Subject + '\n' + params.Message
}
},
response;
if (params.HTTPProxy) {
request.setProxy(params.HTTPProxy);
}
request.addHeader('Content-Type: application/json');
response = request.post(params.To,JSON.stringify(msg)
);
response = JSON.parse(response);
if (request.getStatus() != 200) {
throw 'Response Status: ' + request.getStatus();
}
if (response.errcode !== 0) {
throw 'Response errcode: ' + response.errcode + '\n' + 'Response errmsg: ' + response.errmsg;
}
return JSON.stringify(response);
}catch (error) {
throw 'Sending failed: ' + error;
}
2.创建动作
3.创建用户媒介告警
4.手动制作故障后测试
systemctl stop nginx
systemctl start nginx