Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式,但是越来越多的企业开始使用zabbix结合微信作为主要的告警方式,这样可以及时有效的把告警信息推送到接收人,方便告警的及时处理。
1、注册企业微信
注册地址: 企业微信
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}