随着网络技术的发展,作为开发人员,虽然现在运维人员的分类越来越细致,但是知道监控系统还是非常有必要的。
今天简单介绍一下我们线上环境使用的监控系统zabbix,zabbix的报警媒介支持很多种,zabbix支持的报警媒介如下:
目前常用的应该是email或者短信通知,甚至是电话通知,目前我们使用的是email + 企业微信 两种报警方式,企业微信主要提高报警的及时性,主要还是零成本,这种方式对于线上问题的发现提供便利。
以下分享zabbix和企业微信的报警配置,zabbix通过执行Python脚本,把报警信息推送到企业微信。用户需要提前申请企业微信,获取相关参数配置到Python脚本中。
通过Python脚本实现:
#!/usr/bin/python
#_*_coding:utf-8 _*_
import requests,sys,json
import urllib3
import os
import logging
logging.basicConfig(level = logging.DEBUG, format='%(asctime)s, %(filename)s, %(levelname)s, %(message)s',
datefmt='%a, %d %b %Y %H:%M:%S',
filename=os.path.join('/usr/lib/zabbix/alertscripts', 'wx.log'),
filenode = 'a')
urllib3.disable_warnings()
reload(sys)
sys.setdefaultencoding('utf-8')
proxies={
'http':'**',
'https':'**'
}
tmp_name='/usr/lib/zabbix/alertscripts/data/zabbix_wechat_config.json'
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,proxies=proxies)
#print(r.json())
if r.json()['errcode'] != 0:
return False
else:
Token = r.json()['access_token']
#file = open(tmp_name, 'w')
#file.write(r.text)
#file.close()
return Token
def SendMessage(User,Agentid,Subject,Content):
#try:
# file = open(tmp_name, 'r')
# Token = json.load(file)['access_token']
# file.close()
#except:
# Token = GetTokenFromServer(Corpid, Secret)
Token = GetTokenFromServer(Corpid, Secret)
n = 0
Url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s" % Token
Data = {
#"touser": User, # 企业号中的用户帐号,在zabbix用户Media中配置,如果配置不正常,将按部门发送。
#"totag": Tagid, # 企业号中的标签id,群发使用(推荐)
"toparty": User, # 企业号中的部门id,群发时使用。
"msgtype": "text", # 消息类型。
"agentid": Agentid, # 企业号中的应用id。
"text": {
"content": Subject + 'n' + Content
},
"safe": "0"
}
r = requests.post(url=Url,data=json.dumps(Data),verify=False,proxies=proxies)
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,proxies=proxies)
#print(r.json())
return r.json()
if __name__ == '__main__':
User = sys.argv[1] # zabbix传过来的第一个参数
Subject = str(sys.argv[2]) # zabbix传过来的第二个参数
Content = str(sys.argv[3]) # zabbix传过来的第三个参数
Corpid = "**需要替换**" # CorpID是企业号的标识
Secret = "**需要替换**" # Secret是管理组凭证密钥
#Tagid = "1" # 通讯录标签ID
Agentid = "**需要替换**" # 应用ID
#Partyid = "1" # 部门ID
Status = SendMessage(User,Agentid,Subject,Content)
print Status
zabbix中的一些配置如下
1、管理 -> 报警媒介类型配置:
2、配置 -> 动作:
3、配置 -> 主机
触发器配置
web场景配置



