目录
一、配置企业微信
1.注册企业微信
企业微信注册地址:
https://work.weixin.qq.com/https://work.weixin.qq.com/
使用微信报警需要先注册企业微信,填写注册信息即可
2.注册完成后,创建总部门名称,然后在总部门名称里创建子部门,加入成员
3.创建应用,通过这个应用发送报警信息
4.收集信息,后边脚本里需要使用
① AgentId对应脚本里的agentid
② Secret对应脚本里的corpsecret
③ 账号对应脚本里的touser
④ 部门ID对应脚本里的toparty
⑤ 企业ID对应脚本里的corpid
二、微信关联企业微信接收报警内容
扫描二维码关注我的企业接收报警信息
三、配置zabbix_server
1.上传软件包
链接: https://pan.baidu.com/s/18mgYXNGAJItFDoQcOnNdLg?pwd=ut31
提取码: ut31
[root@localhost alertscripts]# ls
simplejson-3.8.2.tar.gz
[root@localhost alertscripts]#
[root@zabbix alertscripts]# tar zxf simplejson-3.8.2.tar.gz
[root@zabbix alertscripts]# cd simplejson-3.8.2/
[root@zabbix simplejson-3.8.2]# python setup.py build && python setup.py install
#这个命令会报一个错,不用管它
[root@zabbix simplejson-3.8.2]# cd ..
2.准备脚本发送消息到企业微信
以下代码来源网络,我做了简单的修改,如有侵权,请联系我删除
[root@zabbix alertscripts]# vim zabbix.py
#!/usr/bin/python
#_*_coding:utf-8 _*_
import urllib,urllib2
import json
import sys
import simplejson
reload(sys)
sys.setdefaultencoding('utf-8')
def gettoken(corpid,corpsecret):
gettoken_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + corpsecret
# print gettoken_url
try:
token_file = urllib2.urlopen(gettoken_url)
except urllib2.HTTPError as e:
print e.code
print e.read().decode("utf8")
sys.exit()
token_data = token_file.read().decode('utf-8')
token_json = json.loads(token_data)
token_json.keys()
token = token_json['access_token']
return token
def senddata(access_token,user,subject,content):
send_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + access_token
send_values = {
"touser":'Zhangxin', #企业号中的用户帐号
"toparty":"2", #企业号中的部门id。
"msgtype":"text",
"agentid":"1000007", #企业号中的应用id。
"text":{
"content":subject + '\n' + content
},
"safe":"0"
}
# send_data = json.dumps(send_values, ensure_ascii=False)
send_data = simplejson.dumps(send_values, ensure_ascii=False).encode('utf-8')
print(send_data)
send_request = urllib2.Request(send_url, send_data)
response = json.loads(urllib2.urlopen(send_request).read())
print str(response)
if __name__ == '__main__':
user = str(sys.argv[1])
subject = str(sys.argv[2])
content = str(sys.argv[3])
corpid = 'wwf31f289e42649a46' #企业号的标识ID
corpsecret = '3CtjHoP8QuCkMpAmrIKkLiuCZMZ0ihSpWMSKzHANgxiN' #应用程序的密钥
accesstoken = gettoken(corpid,corpsecret)
senddata(accesstoken,user,subject,content)
注意脚本存放位置!!(之前因为位置不对找了半小时原因,注:修改配置文件里的媒介报警位置不会生效!!!)
[root@localhost alertscripts]# egrep -v '^$|^#' /etc/zabbix/zabbix_server.conf
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_server.pid
DBName=zabbix
DBUser=root
DBPassword=root
StartPollers=30
StartPingers=5
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
CacheSize=128M
Timeout=4
AlertScriptsPath=/usr/lib/zabbix/alertscripts #这个目录存放报警脚本
ExternalScripts=/usr/lib/zabbix/externalscripts
FpingLocation=/usr/sbin/fping
LogSlowQueries=3000
JavaGateway=10.0.0.33
JavaGatewayPort=10052
StartJavaPollers=5
[root@localhost alertscripts]#
#如位置不对,移动报警脚本至脚本目录
[root@localhost alertscripts]#mv zabbix.py /usr/lib/zabbix/alertscripts/
可以手动测试
[root@zabbix alertscripts]# chmod +x zabbix.py
[root@zabbix alertscripts]# ./zabbix.py 1 zabbix hello
{"text": {"content": "zabbix\nhello"}, "safe": "0", "msgtype": "zabbix", "touser": "ZhangXin", "agentid": "1000007", "toparty": "2"}
{u'invaliduser': u'', u'errcode': 0, u'errmsg': u'ok'}
看到返回值是OK,警告可以忽略
四、Web页面配置
1.创建报警媒介
管理--报警媒介类型--创建报警媒介
类型选择脚本
脚本名称和server脚本名称保持一致
参数:
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
添加完参数之后,把启用打开,点击更新
创建成功
2.定义收件人,把媒介贴到用户上
管理--用户--Admin
类型选择刚写入的媒介报警名称,收件人写部门成员的账号,点击更新
添加完成,更新
3.动作配置
配置--动作--Trigger actions--创建动作
添加条件
添加操作
主题:
{TRIGGER.STATUS}: {TRIGGER.NAME}
消息:
告警主机:{HOST.NAME}
主机IP: {HOST.IP}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态: {TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID: {EVENT.ID}
添加恢复消息细节
主题:
{TRIGGER.STATUS}: {TRIGGER.NAME}
消息:
告警主机:{HOST.NAME}
主机IP: {HOST.IP}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态: {TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID: {EVENT.ID}
操作完以上之后,不要忘记点击更新!
更新操作添不添加都可以
4.测试
现在必须有被监控的主机,已经添加进了监控的zabbix_agentd主机
[root@localhost ~]# systemctl stop zabbix-agent.service
等待几分钟,在监测的仪表盘里将会看到错误提示
再看企业微信,也已经发过来了。(不用管内容 这是我之前测试的,电脑登录没有记录了。内容可自行添加设置。)
回到被刚刚关掉agentd的主机上,再开启
[root@localhost ~]# systemctl start zabbix-agent.service
可以看到恢复操作已经有提示了