监控在运维工作中是比不可少的一环,那伴随着监控也同时会涉及到告警机制,一般的监控到的结果是成功或者失败,如Ping不通、访问网页出错、连接不到Socket,发生时这些称之为故障,故障是最优先的告警。那针对于 zabbix 的告警可以有多种方式去做:
zabbix三种常见报警介质:
短信:它的好处是不用联网手机有信号就行,但是需要有短信网关,需要花钱。
邮件:它也可以做到手机短信通知,基本现在邮箱都有这个功能(如果你使用的是移动的手机号,可以让zabbix将报警信息发送到139邮箱,再通过139绑定到手机号来接收短信,免费),当然如果你使用qq邮箱微信也是可以推送邮件提醒的,完全免费。
微信:对于我这种手机一响就会掏出来看一下的人比较方便,可定制化强, 完全免费
QQ:通过OneAlert 110告警机器人实现,具体请查百度”one alert 110告警机器人”
下面来介绍下如何通过 wechat 来配置 zabbix 报警
wechat 报警所具备的一些条件:
1、在 zabbix_server 中配置 alertscript 路径:
2、在 zabbix 界面中确保触发器是已经启用的状态(一般做测试都会临时搭建一个 zabbix_server 出来,通过 ansible 定制包10分钟就可以安装完成)
3、需要申请微信企业号
去该页面申请一个即可:https://qy.weixin.qq.com/
具体操作则是输入基本信息,在邮箱中点击链接进行激活,选择微信企业号类型、信息登记就可以了。
一、安装 simplejson 3.8.2 (Zabbix_Server 端操作)
wget https://pypi.python.org/packages/f0/07/26b519e6ebb03c2a74989f7571e6ae6b82e9d7d81b8de6fcdbfc643c7b58/simplejson-3.8.2.tar.gz#md5=53b1371bbf883b129a12d594a97e9a18
tar zxf simplejson-3.8.2.tar.gz
cd simplejson-3.8.2
python setup.py build
python setup.py install
下载 wechat.py 安装脚本
git clone https://github.com/X-Mars/Zabbix-Alert-WeChat.git
cp Zabbix-Alert-WeChat/wechat.py /usr/local/zabbix/alertscripts/
chmod +x wechat.py
二、企业微信号设置
我起名该企业微信号名称为报警小灵通
1、通讯录设置
点击通讯录,新建一个技术部、接着在技术部下面新建一个子部门 —> 运维小组
并记录运维小组的部门ID(等下修改wechat.py脚本的时候需要该ID号,用于发送报警信息)
在通讯录中添加一个用户(该用户用来发送微信企业号的消息)
2、应用中心设置
创建应用,取名 zabbix 报警,新建消息型应用,填写应用名称、功能介绍、并且选择可见范围 —> 运维小组。
并且记录应用ID(等下修改wechat.py脚本的时候需要该ID号,用于发送报警信息)
3、应用权限设置
点击左侧栏 —> 设置 —> 权限设置 —> 新建管理组,并且设置权限
继续点击刚才新建的小组 —> 权限处理 —> 记录 CorpID与Secret(等下修改wechat.py脚本的时候需要该ID号,用于发送报警信息)
扫二维码即可关注,接收消息
三、wechat 脚本修改(修改部门ID、应用ID、CorpID与SecretID),就是我们刚才所记录的,如果没有记录,可以回头去看
#!/usr/bin/python
#_*_coding:utf-8 _*_
import urllib,urllib2
import json
import sys
import simplejson
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":user, #企业号中的用户帐号,在zabbix用户Media中配置,如果配置不正常,将按部门发送。
"toparty":"4", #企业号中的部门id。
"msgtype":"text", #消息类型。
"agentid":"6", #企业号中的应用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')
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]) #zabbix传过来的第一个参数
subject = str(sys.argv[2]) #zabbix传过来的第二个参数
content = str(sys.argv[3]) #zabbix传过来的第三个参数
corpid = 'wx5053' #CorpID是企业号的标识
corpsecret = 'FOPk4InFyvHFdz6-_NjeZ9gHN1zJG' #corpsecretSecret是管理组凭证密钥
accesstoken = gettoken(corpid,corpsecret)
senddata(accesstoken,user,subject,content)
执行 wechat.py 脚本进行测试,看是否收得到公众号信息,我这边是正常的
四、Zabibx Web 界面设置
1、添加报警媒介
点击管理 —> 报警媒介 —> 创建报警媒介
下图请注意!脚本参数中的第一个是我在微信企业号中创建的用户,并且 hongxue 是该用户的账户,并不是微信号!!!
2、设置用户报警媒介
点击管理 —> 用户 —> 报警媒介(类型为刚才创建的报警媒介、收件人还是选择hongxue)
3、配置触发器
点击配置 —> 动作 —> 创建动作(事件源为触发器),并且设置动作操作
五、验证微信报警是否正常
我做了几个操作,修改 /etc/passwd,并且关闭ssh服务,具体动作日志可以点击报表 —> 动作日志查看
下面可以看到我微信收到企业号推送的报警信息