首先,我们不希望一直盯着触发器或者事件列表。最好是在发生比较严重的事情(如问题)的时候能够接收到通知。并且,当发生问题时,我们希望所有相关人员都能收到通知。
也就是说,当配置的监控超过触发器设定的阈值则触发动作,这个动作可以是(发送消息|执行命令)
为了能够实现发送和接受zabbix的通知,则必须:
动作由“触发器条件”和操作组成。总的来说,当条件满足时,则执行相应的操作。
点击管理→报警媒介类型,设定发送消息的介质email、定制Zabbix报警的内容
# 告警
告警主机:{HOST.NAME1}
告警服务: {ITEM.NAME1}
告警Key1: {ITEM.KEY1}:{ITEM.VALUE1}
告警Key2: {ITEM.KEY2}:{ITEM.VALUE2}
严重级别: {TRIGGER.SEVERITY}
# 恢复
恢复主机:{HOST.NAME1}
恢复服务: {ITEM.NAME1}
恢复Key1:{ITEM.KEY1}:{ITEM.VALUE1}
恢复Key2: {ITEM.KEY2}:{ITEM.VALUE2}
配置→动作→创建动作,以及对应的操作:
1.创建动作
2.点击操作,选择接受的用户
3.配置故障告警内容,恢复告警内容
模拟恢复故障,收到告警邮件
通过,报表→动作日志,可以查看报警内容
下载脚本,并赋予对应的执行权限
[root@zabbix-server ]# cd /usr/lib/zabbix/alertscripts/
[root@zabbix-server alertscripts]# vim weixin.py
#!/usr/bin/env python3
#-*- coding: utf-8 -*-
#comment: zabbix接入微信报警脚本
import requests
import sys
import os
import json
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('/tmp','weixin.log'),
filemode = 'a')
corpid='ww8cff74fbad8af888'
appsecret='eleCzxftc11NP9zPmdeIklhNg2ZiplJsUS2S8ELq8yT'
agentid=1000004
#获取accesstoken
token_url='https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + appsecret
req=requests.get(token_url)
accesstoken=req.json()['access_token']
#发送消息
msgsend_url='https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + accesstoken
touser=sys.argv[1]
subject=sys.argv[2]
#toparty='3|4|5|6'
message=sys.argv[2] + "\n\n" +sys.argv[3]
params={
"touser": touser,
# "toparty": toparty,
"msgtype": "text",
"agentid": agentid,
"text": {
"content": message
},
"safe":0
}
req=requests.post(msgsend_url, data=json.dumps(params))
logging.info('sendto:' + touser + ';;subject:' + subject + ';;message:' + message)
[root@zabbix-server alertscripts]# chmod +x weixin.py
安装脚本环境依赖
[root@zabbix-server alertscripts]# yum install python3 python3-devel python3-pip -y
完毕!
[root@zabbix-server alertscripts]# pip3 install requests
修改脚本如下内容:
corpid='企业ID'
appsecret='自定义app的secret'
'eleCzxftc11NP9zPmdeIklhNg2ZiplJsUS2S8ELq9Uc'
agentid=自定义应用的agentid
执行脚本,参数1:用户微信,参数2:消息主体,参数3:消息内容
[root@zabbix-server alertscripts]# ./weixin.py MaHuTeng 主题 "设备无故障,只是测试发送信息"
#切记一定要删除,否知会导致权限问题
[root@zabbix-server alertscripts]# rm -f /tmp/weixin.log
管理→报警媒介类型,设定发送消息的介质-微信,然后设定发送内容;
定义告警及恢复内容
{ALERT.SENDTO} #发送的用户
{ALERT.SUBJECT} #发送的主题
{ALERT.MESSAGE} #发送的内容
# 告警
告警主机:{HOST.NAME1}
告警服务: {ITEM.NAME1}
告警Key1: {ITEM.KEY1}:{ITEM.VALUE1}
告警Key2: {ITEM.KEY2}:{ITEM.VALUE2}
严重级别: {TRIGGER.SEVERITY}
# 恢复
恢复主机:{HOST.NAME1}
恢复服务: {ITEM.NAME1}
恢复Key1:{ITEM.KEY1}:{ITEM.VALUE1}
恢复Key2: {ITEM.KEY2}:{ITEM.VALUE2}
每30分钟向Mysql Administrators组发送一次重复的通知(共5次)。配置如下:
通知将分别在问题发生后的第一时间(0:00)以及30分钟(0:30)、1小时(1:00)、1个半小时(1:30)和2个小时(2:00)发送(当然,除非问题提前解决)
将问题升级到领导那里
如果监控长时间处于一个报警的状态,可能是没有人去解决也可能是他们无法解决。在这种情况下,将问题升级到经理那里之前,运维人员会收到四条消息。
注意: 只有在问题尚未被确认的情况下(假设没有人处理这个问题),第五条消息经理才会收到。
本示例展示了一个更为复杂的场景。在向Mysql管理员发送了多个消息后并升级到经理那之后,Zabbix将尝试重启Mysql数据库。如果该问题持续了两个半小时还没的的到确认,就会进行重启操作。
如果问题仍然存在,则再过30分钟,Zabbix将向所有来宾用户发送一条消息。
如果还没有解决,则再过一个小时,Zabbix将使用命令重启Mysql数据库服务器。
发送一个关于长期存在的问题的延迟通知:
当一个问题如果长时间没有被解决,则将该问题升级到Leader那里
点击管理→用户组,创建ops组,leader组
单机管理→用户,创建用户ops1,加入ops组,创建用户boss1加入leader组
请注意{ESC.HISTORY}宏在自定义消息中的使用。该宏将包含关于升级之前操作的所有步骤的信息,例如发送的通知和执行命令。
主题:Problem:{EVENT.NAME}
告警主机:{HOST.NAME1}
告警服务: {ITEM.NAME1}
告警Key1: {ITEM.KEY1}:{ITEM.VALUE1}
告警Key2: {ITEM.KEY2}:{ITEM.VALUE2}
严重级别: {TRIGGER.SEVERITY}
此前步骤:{ESC.HISTORY}
1)1步是给ops发送消息,立即发送
2)2步是给ops发送消息,2分钟后发送
3)3-4步骤是给leader发送消息,每隔2分钟发送一次,总共2个步骤,所以发送2次
4)5-6步骤是给admin发送消息,每隔2分钟发送一次,,共2个步骤,所以发送2次