Zabbix监控之报警配置

邮件报警

zabbxi 邮件告警推送有两种方式:

  1. 使用zabbix服务端的本地邮箱账号发送,邮件名为:user@hostname.localdomain,user为发送邮件的用户,hostname为zabbix-server的主机名,该邮箱只能发送,不能接收外部邮件;
  2. 使用外部邮箱指定为告警发送邮箱

定义发件人

定义收件人

测试报警信息

自定义报警内容过

定制报警内容: https://www.zabbix.com/documentation/4.0/zh/manual/appendix/macros/supported_by_location

发送警告

1
2
3
4
5
6
7
8
9
10
11
报警邮件标题可以使用默认信息,亦可使用如下中文报警内容
名称:Action-Email
默认标题:故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}

恢复警告

1
2
3
4
5
6
7
8
9
10
恢复标题:恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!
恢复信息:
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}

微信报警

查看配置文件里的脚本目录路径

1
2
[root@zabbix ~]# grep "^AlertScriptsPath" /etc/zabbix/zabbix_server.conf 
AlertScriptsPath=/usr/lib/zabbix/alertscripts

将weixin.py放在zabbix特定脚本目录

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
#!/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":'damaiyunwei', #企业号中的用户帐号,在zabbix用户Media中配置,如果配置不正常,将按部门发送。
"toparty":"2", #企业号中的部门id。
"msgtype":"text", #消息类型。
"agentid":"1000002", #企业号中的应用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]) #zabbix传过来的第一个参数
subject = str(sys.argv[2]) #zabbix传过来的第二个参数
content = str(sys.argv[3]) #zabbix传过来的第三个参数
corpid = 'ww758c347e5635e284' #CorpID是企业号的标识
corpsecret = 'Sf5m6Xfu3laloq36k9mIrrpjYufGl4U61zyUApCWNcE' #corpsecretSecret是管理组凭证密钥
accesstoken = gettoken(corpid,corpsecret)
senddata(accesstoken,user,subject,content)

赋予执行权限

1
2
3
[root@zabbix ~]# chmod +x /usr/lib//zabbix/alertscripts/weixin.py
[root@zabbix ~]# ls /usr/lib//zabbix/alertscripts/weixin.py -l
-rwxr-xr-x 1 root root 1045 Nov 17 14:51 /usr/lib//zabbix/alertscripts/weixin.py

配置发信人

上图脚本表示调用脚本时向脚本传入什么参数,参数解释如下
{ALTER.SENDTO} # 发送给谁,该参数在邮件告警中有作用,但微信告警中没有
{ALTER.SUBJECT} # 告警标题,该参数在邮件告警中有作用,但微信告警中没有
{ALTER.MESSAGE} # 告警内容,在微信告警中有用

配置收信人

登陆企业微信公众号添加账户

企业微信:https://work.weixin.qq.com/wework_admin/loginpage_wx

登陆后在企业号上新建应用

上传logo,填写应用名称 ,应用介绍等

查看启动应用

同时会生成应用的AgentId以及Secret,这个在后面步骤会有用

测试信息

1
2
3
[root@zabbix tmp]# python /usr/lib//zabbix/alertscripts/weixin.py 'linuxboy' '测试信息 ' '0000000000000报警信息测试'
{"text": {"content": "测试信息 \n0000000000000报警信息测试"}, "safe": "0", "msgtype": "text", "touser": "yunwei", "agentid": "1000002", "toparty": "2"}
{u'invaliduser': u'yunwei', u'errcode': 0, u'errmsg': u'ok'}

启动发送动作

告警测试