一、告警分类¶
| 报警方式 | 企业应用场景 |
|---|---|
| 发邮件 | 企业邮箱,免费使用 |
| 企业微信-告警应用(机器人) | 需要使用企业微信,免费 |
| OA系统( 钉钉,飞鸽,…) | 与阿里云,免费 |
| 短信 | 0.045元/条左右 (阿里云短信服务) 收费 |
| 电话 | 收费 |
| 第三方报警工具/平台: onealert (省事) | 只需要配置onealert的平台信息,免费使用(限制),收费 |
二、邮件告警¶
2.1 个人邮箱准备¶
1、登录https://mail.163.com/邮箱
2、开启smtp服务


3、根据提示获取授权码JDMRDYBSNAFDAOWO

2.2 配置发件人¶
1、配置报警媒介
(1)关闭所有的报警媒介类型

(2)创建新的媒体类型

创建Message templates
#设置报警信息
信息类型是: 问题
主题: 故障名称: {EVENT.NAME}
消息:
故障始于 时间: {EVENT.TIME} 日期: {EVENT.DATE}
故障名称: {EVENT.NAME}
故障主机: {HOST.NAME}
严重程度: {EVENT.SEVERITY}
额外信息: {EVENT.OPDATA}
故障ID: {EVENT.ID}
触发器地址: {TRIGGER.URL}
#设置故障解决信息
信息类型是: Problem recovery
主题: 故障解决 in {EVENT.DURATION}: {EVENT.NAME}
消息:
故障已经解决 时间: {EVENT.RECOVERY.TIME} 日期: {EVENT.RECOVERY.DATE}
故障名称: {EVENT.NAME}
故障持续时间: {EVENT.DURATION}
故障主机: {HOST.NAME}
故障级别: {EVENT.SEVERITY}
故障ID: {EVENT.ID}
{TRIGGER.URL}


(3)添加报警媒介类型

2、测试发件是否正常


登录qq邮箱进行查看

2.3 配置收件人¶
本质:zbx的用户、用户组。
对所有人员进行分组
-
运维组 : 1904763431@qq.com
-
开发组:1904763431kaifa@qq.com
添加收件人信息



2.4 配置发送邮件的动作/条件¶
1、启动触发器动作


2、查看结果

3、模拟报警
(1)在zabbix-client02主机上关闭nginx后,重新查看仪表板
| [root@zabbix-client02 ~]# systemctl stop nginx |
|---|

查看邮箱

(2)在zabbix-client02主机上重新开启nginx后,重新查看仪表板
| [root@zabbix-client02 ~]# systemctl start nginx |
|---|

查看邮箱

三、微信告警¶
3.1 全流程¶
微信报警,短信,电话,钉钉 自定义脚本报警
通过脚本(py,shell),调用对方api接口(输入接口需要的信息,访问与使用api接口)
1、申请注册企业微信
2、获取企业微信id和告警机器人id和secret
3、使用脚本(shell/python)调用企业微信api接口: python 输入收件人 信息
4、发件人: 报警媒介(告警机器人)
5、收件人: 个人 媒体类型
6、动作: 已经完成
3.2 环境准备¶
3.2.1 企业微信注册¶
参考企业微信注册8步走,建议收藏 - 知乎 (zhihu.com)
3.2.2 企业微信设置白名单¶
1、开通企业邮箱
参考【教程】如何创建属于自己的域名邮箱(附阿里邮箱个人版pop设置)_自定义邮箱域名-CSDN博客
需要配置MX记录

配置完成后,点击【协作】-【邮件】-【概况】进行邮箱域名查看

2、创建机器人
点击【应用管理】-【应用】-【创建应用】

填写应用名称、添加Logo、选择可见范围,点击【创建应用】

3、选择【企业可信IP】,点击【配置】

需要提前把域名备案,否则检验不通过


如果不是云服务器的话,企业可信IP可以通过https://ip138.com/进行查询

3.2.3 获取企业ID、机器人AgentId及Secret¶
1、点击监控机器人

2、查看到AgentId为1000004,Secret为UEYk4P0yFjO74nBaCC5ACTOGOKpVhdQqDkcTtXwkXh0

说明:Secret需要登录app才能查看,上图是根据手机app上进行查看
3、点击【我的企业】即可查看到企业ID

3.3 使用脚本(shell/python)调用企业微信api接口¶
1、编写微信报警脚本
[root@zabbix-server01 ~]# vim /usr/local/share/zabbix/alertscripts/wechat.py
#!/usr/bin/env python3
#-*- coding: utf-8 -*-
# 作者: zq
# 日期: 2023
# 描述: 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', 'wechat.log'),
filemode='a')
# 设置企业ID
corpid='wwe897498df31cc026'
# 设置告警机器人的 Secret
appsecret='UEYk4P0yFjO74nBaCC5ACTOGOKpVhdQqDkcTtXwkXh0'
# 设置告警机器人的 AgentID
agentid=1000004
# 获取 Access Token
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]
# 用户组脚本参数
toparty = 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:' + toparty + ';;subject:' + subject + ';;message:' + message)
2、脚本授权
| [root@zabbix-server01 ~]# chmod +x /usr/local/share/zabbix/alertscripts/wechat.py |
|---|
3、准备python3环境
[root@zabbix-server01 ~]# yum install -y python3 python3-pip
[root@zabbix-server01 ~]# pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
4、脚本测试
(1)开一个窗口查看日志
| [root@zabbix-server01 ~]# python3 /usr/local/share/zabbix/alertscripts/wechat.py 3 网站挂了 请详细查看挂的原因 |
|---|
相关参数说明:
-
3:组ID
-
网站挂了:标题
-
请详细查看挂的原因:内容
(2)新开一个窗口查看日志
| [root@zabbix-server01 ~]# tailf /tmp/wechat.log |
|---|

(3)测试完成后删除日志文件
| [root@zabbix-server01 ~]# rm -f /tmp/wechat.log |
|---|
3.4 配置发件人¶
1、配置报警媒介
(1)关闭所有的报警媒介类型

(2)创建新的媒体类型

创建Message templates
#设置报警信息
信息类型是: 问题
主题: 故障名称: {EVENT.NAME}
消息:
故障始于 时间: {EVENT.TIME} 日期: {EVENT.DATE}
故障名称: {EVENT.NAME}
故障主机: {HOST.NAME}
严重程度: {EVENT.SEVERITY}
额外信息: {EVENT.OPDATA}
故障ID: {EVENT.ID}
触发器地址: {TRIGGER.URL}
#设置故障解决信息
信息类型是: Problem recovery
主题: 故障解决 in {EVENT.DURATION}: {EVENT.NAME}
消息:
故障已经解决 时间: {EVENT.RECOVERY.TIME} 日期: {EVENT.RECOVERY.DATE}
故障名称: {EVENT.NAME}
故障持续时间: {EVENT.DURATION}
故障主机: {HOST.NAME}
故障级别: {EVENT.SEVERITY}
故障ID: {EVENT.ID}
{TRIGGER.URL}


(3)添加报警媒介类型
#名称
企业微信
#类型
脚本
#脚本名称
wechat.py
#脚本参数
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}

2、测试发件是否正常



说明:3是组ID,通过以下方式进行查看

3、登录企业微信进行查看验证
3.5 配置收件人¶
本质:zbx的用户、用户组。
对所有人员进行分组
-
运维组ID : 1
-
开发组ID:2
-
老大组ID:3
添加收件人信息



3.6 配置发送邮件的动作/条件¶
1、启动触发器动作


2、查看结果

3、模拟报警(企业微信因为没有域名备案,无法实现以下场景,用邮件的图暂时代替)
(1)在zabbix-client02主机上关闭nginx后,重新查看仪表板
| [root@zabbix-client02 ~]# systemctl stop nginx |
|---|

查看企业邮箱,观察报警信息
(2)在zabbix-client02主机上重新开启nginx后,重新查看仪表板
| [root@zabbix-client02 ~]# systemctl start nginx |
|---|

查看企业邮箱,观察报警信息