7、物理主机搭建KF2服务端-告警信息微信通知

目录 运维

Zabbix可以自定义报警媒介,当触发器触发后,可以在动作中加入发送消息,消息类型可以是邮件,短信,钉钉,微信等等。接下来我们就配置报警媒介,实现告警信息微信实时通知。

首先我们需要注册一个企业微信,这个注册个人也能通过,没有什么成本。

注册完成并登录后,前往应用管理项,创建一个应用,名称和Logo随意即可。

创建完应用后,点击进入应用,我们需要获取应用的AgentId和Secret,AgentId直接就可以在页面上获取,但Secret不行,直接点击Secret的查看按钮,这时提示需要安装手机版企业微信,按提示下载登录后点击发送即可。

注意:企业微信后续可以关联微信,整个流程走完后就可以删除企业微信。

切换到通讯录项展开菜单,记住部门ID的编号。比如我这里编号为1

然后前往“我的企业”获取企业ID。现在我们手里有AgentId,Secret,企业ID和部门编号这4个参数,后续都会用上。

编写调用企业微信API接口代码

首先进入Zabbix终端,在终端中安装nodejs环境。

apt-get install node npm -y
npm i axios

安装完成后。创建执行文件,赋予执行权限,并使用vim打开。

cd /lib/zabbix/alertscripts && touch WeChat.js && chmod +x WeChat.js && vim WeChat.js

开始编写API调用代码。

编写调用企业微信API接口代码

首先进入Zabbix终端,在终端中安装nodejs环境。

apt-get install node npm -y
npm i axios

安装完成后。创建执行文件,赋予执行权限,并使用vim打开。

cd /lib/zabbix/alertscripts && touch WeChat.js && chmod +x WeChat.js && vim WeChat.js

开始编写API调用代码。

以下为无日志输出的简易版。

#!/usr/bin/env node
const axios = require("axios");
​
/**
 * logPath    -> 日志路径
 * id         -> 企业id
 * Secret     -> Secret
 */
const logPath = "/home/zabbix/wechat.log";
const id = "..............";
const secretId = "..............";
​
/**获取调用时传递的参数,在Zabbix中调用时直接WeChat.js <要发送的信息> process.argv[2]取的就是这个要发送的信息*/
var content = process.argv[2];
if(!content){return false};
​
axios.get("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + id + "&corpsecret=" + secretId)
.then((res) =>{
  
  /**获取返回的token,需要携带这个token去调用下一个api*/
  let token =res.data.access_token;
  if (!token) {return false};
  
  axios.post("https://qyapi.weixin.gq.com/cgi-bin/message/send?access_token=" + token,{
    touser: "@all",
    toparty: "1",               //部门id
    msgtype: "text",            //发送的消息类型
    agentid: "1000002",         //应用id
    text: {
      content: content          //发送的内容
    },
    safe: 0
  });
});

完成后保存退出。

现在回到企业微信网页端,转到我的企业,选择微信插件。

将页面移动下去,有一个邀请关注,用微信扫描这个二维码。后续的通知都会从微信上显示。

接下来回到终端测试测试是否能正确调用。输入

./WeChat.js test

消息成功收到。

创建消息媒介

点击左侧菜单 管理-报警媒介类型 点击创建媒介类型。

将名称设置为WeChatAlert或者其它的也可以,类型选择脚本。名称选择WeChat.js,脚本参数填写{ALERT.MESSAGE}。

接下去点击菜单栏左侧 User settings – Profile 。切换到报警媒介卡,添加一个报警媒介,类型选择WeChatAlert,收件人随意填写因为没有做这方面接口,这个值是无效的。当启用时就默认,如果存在严重性就按图上勾即可,当然你也可以全部勾上。

在动作中添加消息发送

报警消息也是通过触发器触发动作然后动作执行报警脚本来进行发送的,所以我们只要在动作中,添加消息发送即可。

菜单栏左侧选择 配置 – 动作 – Trigger actions 点击刚刚建立的服务端崩溃重启动作,然后转到操作卡,在已有的启动脚本操作下在点击添加。

在弹出的操作细节中,Operation选择发送消息选项,Send to users选择当前的admin用户。勾选Custom message。主题填写为

服务器:{HOSTNAME1}服务端进程未启动!

消息内填写为

服务器:{HOSTNAME1}服务端进程未启动!
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE}{EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}

{}内为变量,具体含义看中文即可。我的只做参考,具体想怎样写都可。完成后点击保存即可。

接下来在恢复操作块在添加一个操作细节,Operation选择发送消息,发送用户依旧admin,仅送到WeChatAlert。主题和消息填写恢复后需要发送的内容。以下是我的例子

服务器:{HOSTNAME1}服务端进程已启动!
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE}{EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}

完成后保存,保存一直保存到底。

接下来暴力关闭192.168.0.170的服务端来模拟崩溃,看看是否报警成功。

成功触发故障告警。告警后启动恢复脚本,从Zabbix拉取启动脚本启动服务端,重新监控到服务端进程后,发送恢复消息。到此,微信告警就完成了,只要监控项配置触发器,都可以为触发器配置一系列动作去完成恢复以及告警等操作。

 

下一篇: