当前位置: 首页 > 科技观察

使用微信发送Zabbix告警信息

时间:2023-03-13 03:35:44 科技观察

Zabbix作为一款传统的监控软件,一直保持着稳定的迭代。至此,稳定版已经更新到5.4。Zabbix内置了很多现成的监控项,从操作系统到常用的软件Redis、MySQL等几乎都能找到对应的监控项。几乎可以零配置实现操作系统的三大组成部分:CPU、硬盘、内存。监视器。此外,Zabbix还支持Linux和Windows。Zabbix内置了丰富的告警媒体,可惜没有内置企业微信告警。企业微信被很多公司使用。得益于其强大的消息推送API,我们可以将企业微信作为告警媒介。本文从零开始介绍如何使用企业微信发送Zabbix告警。1、企业微信配置相关浏览器登录企业微信管理后台,在“应用管理”中创建自建应用,如下图:自建应用获取三个重要参数:“AgentId”、“Secret””和“企业ID”,前两个参数在自建应用中可以看到,“企业ID”需要在最下方的“我的企业”->“企业信息”中查看。这里要注意一点,自建应用中有一个“可视范围”需要填写正确,比如下面的公司架构,如果接到报警的联系人在dev组,那么“自建应用”中的“可见范围”必须是“设置为”dev“或者直接设置为”念一顾问“。如果设置错误,想要接收报警的人将接收不到告警消息,因为他看不到自建应用可见范围配置2、告警通道脚本Zabbix的告警媒体类型可以选择脚本,由系统管理员提供,这是zabbix强大的地方。依赖自定义脚本将告警消息POST到企业微信API。具体可以查看企业微信的相关文档。这里可以直接上传脚本(支持发送markdown格式的内容):#!/bin/python3.7importrequestsimportjsonimportsysimportosfromdotenvimportload_dotenvdefget_token(corpid,secret):url="https://qyapi.weixin.qq.com/cgi-bin/gettoken"data={"corpid":corpid,"corpsecret":secret}response=requests.get(url=url,params=data)ifresponse.json()['errcode']!=0:returnFalseelse:token=response.json()["access_token"]#保存token以供下次使用withopen('/usr/lib/zabbix/alertscripts/.zabbix_wechat_config.json','w')作为文件:file.write(response.text)returntokendefsend_message(user,subject,content,partyid="",agentid=1000002):load_dotenv()try:withopen('/usr/lib/zabbix/alertscripts/.zabbix_wechat_config.json','r')作为文件:token=json.load(file)["access_token"]除了:token=get_token(os.environ.get('corpid'),os.environ.get('secret'))url="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s"%tokendata={"touser":user,#"totag":Tagid,"toparty":partyid,"msgtype":"markdown","agentid":agentid,"markdown":{"content":subject+'\n'+content},"safe":"0"}#企业微信的markdown内容必须使用utf-8编码data=json.dumps(data,ensure_ascii=False).encode(encoding="utf-8")response=requests.post(url=url,data=data)#如果发送失败,重试四次n=0whileresponse.json()['errcode']!=0andn<4:n+=1token=get_token(os.environ.get('corpid'),os.environ.get('secret'))iftoken:url="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s"%tokendata=json.dumps(数据,ensure_ascii=False).encode(encoding="utf-8")response=requests.post(url=url,data=data)print(rejson.json())returnresponse.json()if__name__=="__main__":user=sys.argv[1]subject=str(sys.argv[2])content=str(sys.argv[3])status=send_message(user,subject,content)print(status)通过zabbix传入运行脚本的三个参数(dotenv模块的使用请参考Python开发中如何正确处理凭证)查看配置文件zabbixserver的:/etc/zabbix/zabbix_server.conf,找到参数“AlertScriptsPath”的值,将脚本放在指定目录下。(本文使用的操作系统为CentOS7)三、Zabbix配置作者使用的zabbix版本为5.0,其他版本可能不同。需要配置三个地方,“Management”->“AlarmMediaType”增加报警类型,如下:AlarmMediaConfiguration其中“ScriptParameters”对应上面python脚本接收的参数。在“管理”->“用户”中为zabbix用户配置“告警媒体”,可以配置多个。这里只配置了“企业微信”告警媒体,用户配置告警媒体“配置”->“动作”添加动作并指定对应的操作如下:动作配置动作的实际操作一句话描述上面两张图中:触发级别严重时,通过自定义脚本向zabbix管理员用户组发送告警。选择“自定义消息”,其中“主题”内容为{TRIGGER.STATUS}:{TRIGGER.NAME}消息内容为:警告级别:严重警告主机:{HOSTNAME1}报警时间:{EVENT.DATE}{EVENT.TIME}报警信息:{TRIGGER.NAME}报警项目:{TRIGGER.KEY1}问题详情:{ITEM.NAME}:{ITEM.VALUE}当前状态:{扳机。STATUS}:{ITEM.VALUE1}事件ID:{EVENT.ID}这里只定义了一个步骤。如果需要添加多个步骤,请单击“添加”。里面没有确认,这里实现了向上级管理的发送。“恢复操作”与“更新操作”类似,这里不再赘述。下图是一个实际告警的例子。由于告警内容支持markdown格式,突出显示告警级别,以引起接到告警的相关负责人的注意。实战告警总结文章介绍了Zabbix使用企业微信作为告警媒介的原理。其他类似应用的实现原理也类似。希望本文能对正在努力的你有所帮助。