zabbix基于企业微信、钉钉群聊机器人实现自动化报警
在企业中,我们使用zabbix去进行监控,需要时刻关注应用服务的运行情况,这就少不了实时报警,而使用即时通讯软件报警相对就很方便。
监控环境准备
部署zabbix-server【监控端】
部署zabbix-agent【被监控端】
实现对web服务器监控【监控端】
zabbix 企业微信报警【监控端】
监控环境准备–>zabbix部署参考:Zabbix——企业监控系统搭建、配置详解、代理部署参考:zabbix可视化、监控模板配置、自定义监控参数、自动发现监控下设备、数据库监控、proxy分布式监控搭建配置… --> zabbix 报警【监控端】
1、Zabbix钉钉报警
安装钉钉–创建群聊–管理页面添加机器人–自定义机器人–机器人名称自定义–IP地址填写当前服务公网IP–规则可以是IP也可以是自定义关键词–
把webhook的地址记录下来
编写python报警监控脚本【CentOS自带Python】
[root@zabbix-server ~]# cd /usr/lib/zabbix/alertscripts
[root@zabbix-server alertscripts]# vim dingding.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Author: sxdswc999
import requests
import json
import sys
import os
headers = {'Content-Type': 'application/json;charset=utf-8'}
api_url = "" #机器人的Webhook地址
def msg(text):
json_text= {
"msgtype": "text",
"text": {
"content": text
},
"at": {
"atMobiles": [
"" #手机号
],
"isAtAll": False
}
}
print requests.post(api_url,json.dumps(json_text),headers=headers).content
if __name__ == '__main__':
text = sys.argv[1]
msg(text)
[root@zabbix-server alertscripts]# chmod +x dingding.py
安装python-pip和requests库
[root@zabbix-server alertscripts]# yum -y install epel-release[root@zabbix-server alertscripts]# yum -y install python-pip[root@zabbix-server alertscripts]# pip install requests
测试脚本是否可行
[root@zabbix-server alertscripts]# ./dingding.py 监控报警
{"errcode":0,"errmsg":"ok"}
查看是否接收成功
创建媒介
将Admin用户关联到此媒介:
创建完成–添加关联监控项及动作,动作执行微信报警项(创建不成功的话可以往下看,微信报警中有接下来步骤)
2、基于企业微信实现自动化监控报警
监控环境准备–>zabbix部署参考:Zabbix——企业监控系统搭建、配置详解、代理部署参考:zabbix可视化、监控模板配置、自定义监控参数、自动发现监控下设备、数据库监控、proxy分布式监控搭建配置… --> zabbix 微信报警【监控端】
手机APP下载企业微信–创建企业–电脑端登录后台–登陆后–应用管理–创建应用–自定义机器人–记录(AgentId、Secret)–API文档–第三方应用–工具与资源–接口测试(填入信息,200OK表示通信成功)
应用:报警机器人AgentID 1000002
Secret:2QvlfpUxh4k-JeIuxVNmkh2N7ijfkCs1lzb4TkgrQ
企业 CorpID: wwd5348195e1cd09
部门id: 1
编写python报警监控脚本
需要修改脚本中的四个信息:
self.__corpid = 'wwd5348195e1cd09' //公司的corpid
self.__secret = '2QvlfpUxh4k-JeIuxVNmkh2N7ijfkCs1lzb4TkgrQ' //应用的secret
'toparty':1, //部门id
'agentid':"1000002", //应用id
[root@zabbix-server ~]# vim /usr/lib/zabbix/alertscripts/wechat.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import urllib,urllib2,json
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
class WeChat(object):
__token_id = ''
# init attribute
def __init__(self,url):
self.__url = url.rstrip('/')
self.__corpid = 'wwd5348195e1cd09'
self.__secret = '3gsEC6Mv3vQmdG5MOJBF65U0KzT-1v2GKQhr479uso'
# Get TokenID
def authID(self):
params = {'corpid':self.__corpid, 'corpsecret':self.__secret}
data = urllib.urlencode(params)
content = self.getToken(data)
try:
self.__token_id = content['access_token']
# print content['access_token']
except KeyError:
raise KeyError
# Establish a connection
def getToken(self,data,url_prefix='/'):
url = self.__url + url_prefix + 'gettoken?'
try:
response = urllib2.Request(url + data)
except KeyError:
raise KeyError
result = urllib2.urlopen(response)
content = json.loads(result.read())
return content
# Get sendmessage url
def postData(self,data,url_prefix='/'):
url = self.__url + url_prefix + 'message/send?access_token=%s' % self.__token_id
request = urllib2.Request(url,data)
try:
result = urllib2.urlopen(request)
except urllib2.HTTPError as e:
if hasattr(e,'reason'):
print 'reason',e.reason
elif hasattr(e,'code'):
print 'code',e.code
return 0
else:
content = json.loads(result.read())
result.close()
return content
# send message
def sendMessage(self,touser,message):
self.authID()
data = json.dumps({
'touser':touser,
'toparty':1,
'msgtype':"text",
'agentid':"1000002",
'text':{
'content':message
},
'safe':"0"
},ensure_ascii=False)
response = self.postData(data)
print response
if __name__ == '__main__':
a = WeChat('https://qyapi.weixin.qq.com/cgi-bin')
a.sendMessage(sys.argv[1],sys.argv[3]
zabbix 创建告警媒介–报警媒介–创建脚本媒介–填入脚本文件
登陆ip/zabbix 添加告警用户
创建用户组:web-group,包含vc等用户创建用户:vc等用户,并关联到微信告警希望的结果是:发微信到组web-group,组中的用户vc等人都能收到
设置用户组web-group对主机群组webserver拥有读写(发送消息)权限
为用户 关联告警媒介
Zabbix 添加报警动作
如果希望中文显示自行修改模板告警主机:
告警主机: {HOST.NAME}
告警地址: {HOST.IP}
监控项目: {ITEM.NAME}
告警等级: {TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警时间: {EVENT.DATE} {EVENT.TIME}
测试微信报警
被监控端操作
[root@web1 ~]# systemctl stop httpd
企业微信收到报警