文章目录

  • 3. 通知(告警)
  • 3.1 什么是事件通知
  • 3.2 如何实现事件通知
  • 3.3 配置邮件通知方式
  • 3. 3.1 定义媒介(发件人)
  • 3.3.2 配置动作(发送给谁)
  • 3.3.3 配置媒介(收件人)
  • 3.3.4 测试邮件告警
  • 3.4 基于微信通知方式
  • 3.4.1 编写脚本
  • 3.4.2 定义媒介(发件人)
  • 3.4.3 配置动作(发送给谁)![在这里插入图片描述](https://s2.51cto.com/images/blog/202406/19114746_667254e2a0d1669249.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
  • 3.4.4 配置媒介(收件人)
  • 3.4.5 测试微信告警
  • 4.通知升级
  • 4.1 通知升级的作用
  • 4.2 通知升级示例
  • 4.2.1 通知升级示例1
  • 4.2.2 通知升级示例2
  • 4.2.3 通知升级示例3
  • 4.2.4 通知升级示例4
  • 4.3 事件通知升级实践
  • 4.3.1 创建用户及用户组
  • 4.3.2 配置通知升级动作
  • 4.3.3 测试升级结果


3. 通知(告警)

3.1 什么是事件通知

首先,我们不希望一直盯着触发器或者事件列表。最好是在发生比较严重的事情(如问题)的时候能够接收到通知。并且,当发生问题时,我们希望所有相关人员都能收到通知。
也就是说,当配置的监控超过触发器设定的阈值则触发动作,这个动作可以是(发送消息|执行命令)

3.2 如何实现事件通知

为了能够实现发送和接受zabbix的通知,则必须:

  • 定义媒介:(发件人)
  • 配置动作:使用媒介(用户发送信息→收件人)向已定义的媒介发送消息

动作由“触发器条件”和操作组成。总的来说,当条件满足时,则执行相应的操作。

3.3 配置邮件通知方式

3. 3.1 定义媒介(发件人)

点击管理→报警媒介类型,设定发送消息的介质email、定制Zabbix报警的内容

zabbix告警媒介的作用 zabbix告警分级_发送消息


zabbix告警媒介的作用 zabbix告警分级_zabbix_02


zabbix告警媒介的作用 zabbix告警分级_服务器_03

# 告警
告警主机:{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}

3.3.2 配置动作(发送给谁)

配置→动作→创建动作,以及对应的操作:

1.创建动作

zabbix告警媒介的作用 zabbix告警分级_前端_04


2.点击操作,选择接受的用户

zabbix告警媒介的作用 zabbix告警分级_发送消息_05


3.配置故障告警内容,恢复告警内容

zabbix告警媒介的作用 zabbix告警分级_发送消息_06

3.3.3 配置媒介(收件人)

zabbix告警媒介的作用 zabbix告警分级_发送消息_07

3.3.4 测试邮件告警

模拟恢复故障,收到告警邮件

zabbix告警媒介的作用 zabbix告警分级_前端_08


通过,报表→动作日志,可以查看报警内容

zabbix告警媒介的作用 zabbix告警分级_zabbix_09

3.4 基于微信通知方式

3.4.1 编写脚本

下载脚本,并赋予对应的执行权限

[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

zabbix告警媒介的作用 zabbix告警分级_发送消息_10

执行结果:

zabbix告警媒介的作用 zabbix告警分级_前端_11

3.4.2 定义媒介(发件人)

管理→报警媒介类型,设定发送消息的介质-微信,然后设定发送内容;

zabbix告警媒介的作用 zabbix告警分级_zabbix告警媒介的作用_12


定义告警及恢复内容

zabbix告警媒介的作用 zabbix告警分级_服务器_13

{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}

3.4.3 配置动作(发送给谁)

zabbix告警媒介的作用 zabbix告警分级_前端_14

zabbix告警媒介的作用 zabbix告警分级_zabbix_15


zabbix告警媒介的作用 zabbix告警分级_发送消息_16

3.4.4 配置媒介(收件人)

配置接受的企业微信号(收件人是企业中微信名称)

zabbix告警媒介的作用 zabbix告警分级_发送消息_17

3.4.5 测试微信告警

zabbix告警媒介的作用 zabbix告警分级_前端_18

4.通知升级

4.1 通知升级的作用

  • 用户可以在一定时间内重复收到通知,直到问题解决;
  • 对于已知故障,或者长期存在的故障,可以延迟发送通知消息
  • 对于长期没有解决的故障,可以升级至另一个“更高级别的”用户组,比如leader;
  • 1,2发邮件; ops;
  • 3,4发哟件;leaders

4.2 通知升级示例

4.2.1 通知升级示例1

每30分钟向Mysql Administrators组发送一次重复的通知(共5次)。配置如下:

  • 在操作选项卡中,将Default operation step duration设置为’30m’(即,30分钟)
  • 将升级不走设置为1-5
  • 选择Mysql Administrator组作为消息的接受者

通知将分别在问题发生后的第一时间(0:00)以及30分钟(0:30)、1小时(1:00)、1个半小时(1:30)和2个小时(2:00)发送(当然,除非问题提前解决)

zabbix告警媒介的作用 zabbix告警分级_发送消息_19

4.2.2 通知升级示例2

将问题升级到领导那里
如果监控长时间处于一个报警的状态,可能是没有人去解决也可能是他们无法解决。在这种情况下,将问题升级到经理那里之前,运维人员会收到四条消息。
注意: 只有在问题尚未被确认的情况下(假设没有人处理这个问题),第五条消息经理才会收到。

zabbix告警媒介的作用 zabbix告警分级_服务器_20

4.2.3 通知升级示例3

本示例展示了一个更为复杂的场景。在向Mysql管理员发送了多个消息后并升级到经理那之后,Zabbix将尝试重启Mysql数据库。如果该问题持续了两个半小时还没的的到确认,就会进行重启操作。

如果问题仍然存在,则再过30分钟,Zabbix将向所有来宾用户发送一条消息。

如果还没有解决,则再过一个小时,Zabbix将使用命令重启Mysql数据库服务器。

zabbix告警媒介的作用 zabbix告警分级_服务器_21

4.2.4 通知升级示例4

发送一个关于长期存在的问题的延迟通知:

  • 在操作选项卡中,将Default operation step duration设置为10h
  • 将升级步骤设置为从2到2

通知只在升级场景的第二步发送,或者在问题发生10小时后发送

zabbix告警媒介的作用 zabbix告警分级_发送消息_22

4.3 事件通知升级实践

当一个问题如果长时间没有被解决,则将该问题升级到Leader那里

4.3.1 创建用户及用户组

点击管理→用户组,创建ops组,leader组

zabbix告警媒介的作用 zabbix告警分级_前端_23


zabbix告警媒介的作用 zabbix告警分级_服务器_24


zabbix告警媒介的作用 zabbix告警分级_服务器_25


zabbix告警媒介的作用 zabbix告警分级_发送消息_26


单机管理→用户,创建用户ops1,加入ops组,创建用户boss1加入leader组

zabbix告警媒介的作用 zabbix告警分级_服务器_27


zabbix告警媒介的作用 zabbix告警分级_服务器_28

4.3.2 配置通知升级动作

配置→动作,创建邮件通知升级步骤;

zabbix告警媒介的作用 zabbix告警分级_zabbix_29


zabbix告警媒介的作用 zabbix告警分级_发送消息_30


zabbix告警媒介的作用 zabbix告警分级_发送消息_31

请注意{ESC.HISTORY}宏在自定义消息中的使用。该宏将包含关于升级之前操作的所有步骤的信息,例如发送的通知和执行命令。

主题:Problem:{EVENT.NAME}
告警主机:{HOST.NAME1}
告警服务: {ITEM.NAME1}
告警Key1: {ITEM.KEY1}:{ITEM.VALUE1}
告警Key2: {ITEM.KEY2}:{ITEM.VALUE2}
严重级别: {TRIGGER.SEVERITY}
此前步骤:{ESC.HISTORY}

4.3.3 测试升级结果

1)1步是给ops发送消息,立即发送
2)2步是给ops发送消息,2分钟后发送
3)3-4步骤是给leader发送消息,每隔2分钟发送一次,总共2个步骤,所以发送2次
4)5-6步骤是给admin发送消息,每隔2分钟发送一次,,共2个步骤,所以发送2次