Zabbix 使用之利用Python发送Markdown格式企业微信告警

上周把公司的企业微信认证了下,顺便把Zabbix企业微信告警也做了。
微信告警Python脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/usr/bin/python2.7
#_*_coding:utf-8 _*_

import requests,sys,json
import urllib3
urllib3.disable_warnings()

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('/tmp/zabbix_wechat_config.json', 'w')
file.write(r.text)
file.close()
return Token

def SendMessage(User,Agentid,Subject,Content):
try:
file = open('/tmp/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": User, # 企业号中的用户帐号,在zabbix用户Media中配置,如果配置不正常,将按部门发送。
#"totag": Tagid, # 企业号中的标签id,群发使用(推荐)
"toparty": Partyid, # 企业号中的部门id,群发时使用。
#"msgtype": "text", # 消息类型。
"msgtype": "markdown", # 消息类型。
"agentid": Agentid, # 企业号中的应用id。
"markdown": {
"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__':
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 = "2" # 部门ID

Status = SendMessage(User,Agentid,Subject,Content)
print Status

Zabbix 创建媒体类型

点选Administration->Media types,创建一新脚本媒体类型

配置Zabbix用户邮箱

点选Administration->Users,选择管理员用户

在用户管理界面,选择Media选项

配置Zabbix 动作

点选Configuration->Actions,创建一个动作

配置告警主题及内容

告警内容

1
2
3
4
5
6
7
8
9
10
>**日期**:{EVENT.DATE}
>**时间**:{EVENT.TIME}
>**主机**:{HOST.NAME}
>**等级**:{EVENT.SEVERITY}
>**信息**:{EVENT.NAME}
>**项目**:{TRIGGER.KEY1}
>**详情**:
{ITEM.NAME}:{ITEM.VALUE}
>**状态**:{TRIGGER.STATUS}
>**ID**:{EVENT.ID}

告警效果

一分、两分都是爱!