- A+
所属分类:Zabbix
Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式,但是越来越多的企业开始使用zabbix结合微信作为主要的告警方式,这样可以及时有效的把告警信息推送到接收人,方便告警的及时处理。
1、注册企业微信
注册地址: https://work.weixin.qq.com
2、配置企业微信
2.1 创建部门
2.2 添加成员
也可通过二维码邀请成员
记住成员账号
3. 创建应用
填写完信息记住应用(AgentId、Secret后面会用到)
4、配置监控脚本
准备事项:微信企业号
企业号已经被部门成员关注
企业号有一个可以发送消息的应用,一个授权管理员,可以使用应用给成员发送消息
需要得到的信息:
- 成员账号
- 组织部门ID
- 应用ID
- CorpID和Secret
4.1 修改zabbix_agentd
[root@wain ~]# grep alertscripts /etc/zabbix/zabbix_server.conf # AlertScriptsPath=${datadir}/zabbix/alertscripts AlertScriptsPath=/usr/lib/zabbix/alertscripts
4.2 安装simplejson
wget https://pypi.python.org/packages/f0/07/26b519e6ebb03c2a74989f7571e6ae6b82e9d7d81b8de6fcdbfc643c7b58/simplejson-3.8.2.tar.gz tar zxvf simplejson-3.8.2.tar.gz && cd simplejson-3.8.2 python setup.py build python setup.py install
4.3、配置监控脚本
vi /usr/lib/zabbix/alertscripts/wechat.py
修改脚本里企业号中相关参数信息
#!/usr/bin/python2.7 #_*_coding:utf-8 _*_ # 源地址:https://github.com/X-Mars/Zabbix-Alert-WeChat import requests,sys,json reload(sys) sys.setdefaultencoding('utf-8') def GetTokenFromServer(Corpid,Secret): Url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken" Data = { "corpid":Corpid, "corpsecret":Secret } r = requests.get(url=Url,params=Data,verify=False) print(r.json()) if r.json()['errcode'] != 0: return False else: Token = r.json()['access_token'] file = open('/usr/lib/zabbix/var/zabbix_wechat_config.json', 'w') file.write(r.text) file.close() return Token def SendMessage(User,Agentid,Subject,Content): try: file = open('/usr/lib/zabbix/var/zabbix_wechat_config.json', 'r') Token = json.load(file)['access_token'] file.close() except: Token = GetTokenFromServer(Corpid, Secret) n = 0 Url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s" % Token Data = { "touser":'FangJian', # 企业号中的用户帐号,在zabbix用户Media中配置,如果配置不正常,将按部门发送。 #"totag": '1', # 企业号中的标签id,群发使用(推荐) "toparty": "1", # 企业号中的部门id,群发时使用。 "msgtype": "text", # 消息类型。 "agentid":"1000002", # 企业号中的应用id。 "text": { "content": Subject + 'n' + Content }, "safe": "0" } r = requests.post(url=Url,data=json.dumps(Data),verify=False) while r.json()['errcode'] != 0 and n < 4: n+=1 Token = GetTokenFromServer(Corpid, Secret) if Token: Url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s" % Token r = requests.post(url=Url,data=json.dumps(Data),verify=False) print(r.json()) return r.json() if __name__ == '__main__': # zabbix传过来的第一个参数 User = sys.argv[1] # zabbix传过来的第二个参数 Subject = str(sys.argv[2]) # zabbix传过来的第三个参数 Content = str(sys.argv[3]) # CorpID是企业号的标识 Corpid = "wwc06ac2ef58e8169d" # Secret是管理组凭证密钥 Secret = "hCj2VwvvNp4scE1qpeBMYUbAFDy_5NaiKH5E8g1Kk6w" # 通讯录标签ID #Tagid = "1" # 应用ID Agentid = "1" # 部门ID #Partyid = "1" Status = SendMessage(User,Agentid,Subject,Content) print Status
4.4 报警测试
./wechat.py 1 报警测试 error
至此代表服务器端已配置就绪
5、 zabbix web界面配置
5.1 配置报警媒介
5.2 创建报警用户(我这以管理用户Admin)
5.3 配置用户报警媒介(选择刚才创建的wechat)
5.4 创建动作
5.5 设置报警消息
故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障! 告警主机:{HOSTNAME1} 告警时间:{EVENT.DATE} {EVENT.TIME} 告警等级:{TRIGGER.SEVERITY} 告警信息: {TRIGGER.NAME} 告警项目:{TRIGGER.KEY1} 问题详情:{ITEM.NAME}:{ITEM.VALUE} 当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1} 事件ID:{EVENT.ID}
5.6 恢复报警
恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复! 告警主机:{HOSTNAME1} 告警时间:{EVENT.DATE} {EVENT.TIME} 告警等级:{TRIGGER.SEVERITY} 告警信息: {TRIGGER.NAME} 告警项目:{TRIGGER.KEY1} 问题详情:{ITEM.NAME}:{ITEM.VALUE} 当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1} 事件ID:{EVENT.ID}
到此当某台设备ICMP宕机时,便会发出微信告警信息。(ICMP相关设置需要先做好,否则不会自动告警)
- 微信公众号
- 扫一扫关注微信公众号
- 运维交流群
- 扫一扫二维码加入群聊