环境
zabbix 版本 6.0
流程概述
- 企业微信添加群机器人
- zabbix 添加报警媒介类型
WeChat
- zabbix 添加告警触发动作
- zabbix 修改用户告报警媒介
- 测试
企业微信配置
首先在企业微信群里面添加一个群机器人
,添加后,会给一个HTTPS
的地址,类似这样
https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=693a91f6-7xxx-4bc4-97a0-0ec2sifa5aaa
后面的一串key
就是webhook
的key
,后面会用到
zabbix 添加报警媒介类型
管理 -> 报警媒介类型 -> 创建报警媒介类型
- 报警媒介类型配置
按照上面的进行配置,其中有个Token
参数,这里使用的是全局宏,一会进行定义。
脚本内容如下,复制进去即可
var Wechat = {
token: null,
to: null,
message: null,
parse_mode: null,
sendMessage: function() {
var params = {
msgtype: "markdown",
chat_id: Wechat.to,
markdown: {
content:Wechat.message
},
disable_web_page_preview: true,
disable_notification: false
},
data,
response,
request = new CurlHttpRequest(),
url = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=' + Wechat.token;
if (Wechat.parse_mode !== null) {
params['parse_mode'] = Wechat.parse_mode;
}
request.AddHeader('Content-Type: application/json');
data = JSON.stringify(params);
// Remove replace() function if you want to see the exposed token in the log file.
Zabbix.Log(4, '[Wechat Webhook] URL: ' + url.replace(Wechat.token, '<TOKEN>'));
Zabbix.Log(4, '[Wechat Webhook] params: ' + data);
response = request.Post(url, data);
Zabbix.Log(4, '[Wechat Webhook] HTTP code: ' + request.Status());
Zabbix.Log(4, '[Wechat Webhook] response: ' + response);
try {
response = JSON.parse(response);
}
catch (error) {
response = null;
Zabbix.Log(4, '[Wechat Webhook] response parse error');
}
if (request.Status() !== 200 || response.errcode !== 0 || response.errmsg !== 'ok') {
if (typeof response.errmsg === 'string') {
throw response.errmsg;
}
else {
throw 'Unknown error. Check debug log for more information.'
}
}
}
}
try {
var params = JSON.parse(value);
if (typeof params.Token === 'undefined') {
throw 'Incorrect value is given for parameter "Token": parameter is missing';
}
Wechat.token = params.Token;
if (['Markdown', 'HTML', 'MarkdownV2'].indexOf(params.ParseMode) !== -1) {
Wechat.parse_mode = params.ParseMode;
}
Wechat.to = params.To;
Wechat.message = params.Subject + '\n' + params.Message;
Wechat.sendMessage();
return 'OK';
}
catch (error) {
Zabbix.Log(4, '[Wechat Webhook] notification failed: ' + error);
throw 'Sending failed: ' + error + '.';
}
- Message templates
这里可以添加三种消息通知模板
问题模板
Message type: 问题
主题:<font color="#FF0000" face="黑体">告警通知 - {TRIGGER.SEVERITY} - {EVENT.NAME}</font>
消息:
**设备名称**:{HOST.NAME}
**告警IP**:{HOST.IP}
**所属群组**:{TRIGGER.HOSTGROUP.NAME}
**告警等级**:<font color="warning">{EVENT.SEVERITY}</font>
**告警信息**:{EVENT.NAME}
**当前详情**:{ITEM.NAME} <font color="warning">{ITEM.VALUE}</font>
**告警时间**:{EVENT.DATE} {EVENT.TIME}
恢复模板
Message type: Problem recovery
主题:<font color="#008800" face="黑体">告警恢复- {TRIGGER.STATUS} - {EVENT.NAME}</font>
消息:
**设备名称**:{HOST.NAME}
**告警IP**:{HOST.IP}
**所属群组**:{TRIGGER.HOSTGROUP.NAME}
**告警信息**:{TRIGGER.NAME}
**当前详情**:{ITEM.NAME} <font color="info">{ITEM.VALUE}</font>
**恢复时间**:{EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
**持续时间**:{EVENT.AGE}
问题更新模板
Message type: Problem update
主题:告警更新 {EVENT.AGE}: {EVENT.NAME}
消息:
{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.
{EVENT.UPDATE.MESSAGE}
目前问题状态为 {EVENT.STATUS}, 持续时间: {EVENT.AGE}, 确认状态: {EVENT.ACK.STATUS}.
- 添加全局宏
管理 -> 一般 -> 宏
添加一个 {$EWCHAT_KEY}
,后面的值就填写上面企业微信群机器人的key
zabbix 添加告警触发动作
配置 -> 动作 -> Trigger actions -> 创建动作
zabbix 添加用户告报警媒介
配置 -> 用户 -> 选择用户 -> 报警媒介
测试
找一个主机,随便添加一种触发器,触发告警即可,效果如下
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 365433079@qq.com