出现故障报警的时候,可以通过不同方式通知管理员进行故障处理,尽快恢复业务。Zabbix6.0.4 事件通知机制:邮件通知、短信通知、微信企业服务通知。

        邮件通知又可分成多种方式:本地邮件服务器通知、本地邮件服务结合脚本通知、借助第三方提供的企业邮箱和授权码方式实现邮件通知等。但是目前好多第三方邮件服务商关闭了免费用户的Zabbix通知邮件发送转接功能,所以建议大家还是自建方式来完成,或者付费购买邮箱,要求服务商提供并保证授权码认证转发绝对可用,这样来保障实际生产环境中的Zabbix邮箱通知的稳定行和有效性。

  本文在实验环境下实现本地邮件服务结合shell脚本实现Zabbix邮件通知。


1. 在Zabbix-Server上配置本地邮件服务

# 安装mailx工具
[root@CentOS84-IP18 ]#yum -y install mailx
[root@CentOS84-IP18 ]#mail -V
12.5 7/5/10
[root@CentOS84-IP18 ]#echo "zabbix test mail" | mail -s "zabbix" nj_??z@163.com
/usr/sbin/sendmail: No such file or directory
"/root/dead.letter" 9/223
. . . message not sent.
[root@CentOS84-IP18 ]#mail root
Subject: fdkafdla
Ctrl + D
Null message body; hope thats ok
/usr/sbin/sendmail: No such file or directory
"/root/dead.letter" 9/212
. . . message not sent.

#### 出现上面的错误是没有安装基本的postfix软件包或者没启动服务
[root@CentOS84-IP18 ]#yum -y install postfix

[root@CentOS84-IP18 ]#systemctl enable --now postfix
Created symlink /etc/systemd/system/multi-user.target.wants/postfix.service → /usr/lib/systemd/system/postfix.service.
[root@CentOS84-IP18 ]#ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 100 127.0.0.1:25 0.0.0.0:*
LISTEN 0 100 [::1]:25 [::]:*

[root@CentOS84-IP18 ]#echo "zabbix test mail" | mail -s "zabbix" nj_??z@163.com
[root@CentOS84-IP18 ]#

2. 设置接收邮箱白名单

2.1 获取本地邮件服务和QQ接收邮箱通信信息

#### 测试中发现QQ邮箱开始是无法收到非正常域名的邮件的,也不在垃圾邮件中。后面通过下面的方式精准地写好白名单后可以在QQ邮箱内收到邮件了。
[root@CentOS84-IP18 ]#hostname
CentOS84-IP18
#### 特别提示,发两次这个邮件就会送到回复设备的邮件,内就有全部的发送邮箱格式可以提取出来!!!
[root@CentOS84-IP18 ]#echo "zabbix test mail" | mail -s "zabbix" 105??????74@qq.com
[root@CentOS84-IP18 ]#echo "zabbix test mail" | mail -s "zabbix" 105??????74@qq.com
You have new mail in /var/spool/mail/root
[root@CentOS84-IP18 ]#ll /var/spool/mail/root
-rw------- 1 root mail 6309 May 29 19:55 /var/spool/mail/root
## 下面这段有很多内容,稍微看下就能看到 root@CentOS84-IP18.localdomain 是这台主机发出的带本地域名后缀的邮箱格式,这个地址可以加入到QQ邮箱白名单就可以接收到邮件了。
[root@CentOS84-IP18 ]#cat /var/spool/mail/root
........................
From MAILER-DAEMON Sun May 29 19:55:44 2022
Return-Path: <>
X-Original-To: root@CentOS84-IP18.localdomain
Delivered-To: root@CentOS84-IP18.localdomain
Received: by CentOS84-IP18.localdomain (Postfix)
id CC3738157C57; Sun, 29 May 2022 19:55:44 +0800 (CST)
Date: Sun, 29 May 2022 19:55:44 +0800 (CST)
From: MAILER-DAEMON@CentOS84-IP18.localdomain (Mail Delivery System)
Subject: Undelivered Mail Returned to Sender
To: root@CentOS84-IP18.localdomain
Auto-Submitted: auto-replied
MIME-Version: 1.0
Content-Type: multipart/report; report-type=delivery-status;
boundary="A04BD8157C56.1653825344/CentOS84-IP18.localdomain"
Content-Transfer-Encoding: 8bit
Message-Id: <20220529115544.CC3738157C57@CentOS84-IP18.localdomain>
............................

[root@CentOS84-IP18 ]#

2.2 设置白名单

实践案例:Zabbix本地邮件服务+脚本实现故障邮件通知_Zabbix6.0.4邮件故障通知

实践案例:Zabbix本地邮件服务+脚本实现故障邮件通知_Zabbix 事件通知机制_02

为了后面Zabbix-server能正常发出邮件,QQ能收到,顺道一起加好zabbix账户的白名单

实践案例:Zabbix本地邮件服务+脚本实现故障邮件通知_Zabbix 事件通知机制_03


3. 告警脚本

3.1 脚本编写

[root@CentOS84-IP18 ]#find / -name alertscripts
/usr/lib/zabbix/alertscripts
[root@CentOS84-IP18 ]#find / -name zabbix_server.conf
/etc/zabbix/zabbix_server.conf
[root@CentOS84-IP18 ]#vim /etc/zabbix/zabbix_server.conf
### Option: AlertScriptsPath
# Full path to location of custom alert scripts.
# Default depends on compilation options.
# To see the default path run command "zabbix_server --help".
#
# Mandatory: no
# Default:
AlertScriptsPath=/usr/lib/zabbix/alertscripts


[root@CentOS84-IP18 ]#vim /usr/lib/zabbix/alertscripts/mailx.sh
#!/bin/bash
#
#####################################################################
#Date: 2022-05-29
#FileName: /usr/lib/zabbix/alertscripts/mailx.sh
#Description: The Test Script
#Copyright (C):2022 All rights reserved
#####################################################################

MESSAGE=$(echo $2 | tr "\r\n" "\n")
SUBJECT=$(echo $3 | tr "\r\n" "\n")
MAILTO=$1

echo "$MESSAGE" | mail -s "$SUBJECT" $MAILTO

[root@CentOS84-IP18 ]#
[root@CentOS84-IP18 ]#chmod a+x /usr/lib/zabbix/alertscripts/mailx.sh
[root@CentOS84-IP18 ]#chown zabbix.zabbix /usr/lib/zabbix/alertscripts/mailx.sh

[root@CentOS84-IP18 ]#bash /usr/lib/zabbix/alertscripts/mailx.sh 105?????74@qq.com "hello,shone welcome you Success!" "666666"

3.2 脚本发送邮件在接收端QQ邮箱验证


实践案例:Zabbix本地邮件服务+脚本实现故障邮件通知_qq邮箱_04


4. Zabbix -Server 的Web下配置

4.1 Zabbix Web创建报警媒介类型

报警媒介类型是一种给运维工程师发送消息通知的渠道,即当zabbix 的触发器触发一个事件后,怎么才能把这个 事件通过某些方式通知给运维工程师呢?那么媒介类型就起到这样的作用,媒介类型创建好之后,需要在每个账户 里面添加相应的收件配置,比如邮件类型的媒介类型要给zabbix账户添加邮箱,如果是微信类型的媒介类型那么就要在zabbix账户设置微信号,同样的到来,短信类型的媒介类型那就得给zabbix账户设置手机号用于接收报警消息内容。

       管理-->报警媒介类型-->创建媒体类型

实践案例:Zabbix本地邮件服务+脚本实现故障邮件通知_qq邮箱_05


         脚本名称:mailx.sh 也可以用phyton 路径是在zabbix-server的conf文件中对应好的。 脚本参数:与mailx.sh脚本需要的3个参数位对应:

  • {ALERT.SENDTO} #接收方,使用的是在user中用户的联系方式,可以是电话号码、Email-address等
  • {ALERT.SUBJECT} #邮件标题,使用的是在action中的subject主题
  • {ALERT.MESSAGE} #邮件内容,使用的是在action中的message信息,包含operation和recovery operation

          管理 ---- 用户名称 ------ 点击Admin(或自己想指定的用户) ------ 报警媒介 ---- 添加 -----(退回到上一个窗口)点击更新

实践案例:Zabbix本地邮件服务+脚本实现故障邮件通知_qq邮箱_06


实践案例:Zabbix本地邮件服务+脚本实现故障邮件通知_qq邮箱_07


4.3 创建动作

       动作是对zabbix 触发器触发后生成的事件的具体处理操作,可以是远程执行命令,也可以是发送通知给指定的管 理员进行故障处理,发送命令是调用的上一步骤创建好的报警媒介类型。

       配置 --> 动作 --> trigger actions动作 --> 创建动作

实践案例:Zabbix本地邮件服务+脚本实现故障邮件通知_Zabbix 事件通知机制_08



实践案例:Zabbix本地邮件服务+脚本实现故障邮件通知_qq邮箱_09


       在zabbix5.0以上的版本,告警信息模板的统一可用的默认模板放到告警媒介类型内了,也可在动作里设置了个性化自定义的报警邮件格式模板



实践案例:Zabbix本地邮件服务+脚本实现故障邮件通知_Zabbix 事件通知机制_10


实践案例:Zabbix本地邮件服务+脚本实现故障邮件通知_qq邮箱_11


6. 验证

      停掉IP88上的Nginx服务

[root@CentOS84-IP88 ]#systemctl stop  nginx

      监测 ---- 主机


实践案例:Zabbix本地邮件服务+脚本实现故障邮件通知_qq邮箱_12


       QQ收到对应的三个邮件


实践案例:Zabbix本地邮件服务+脚本实现故障邮件通知_qq邮箱_13


       邮件详细内容,是按照默认定义格式的


实践案例:Zabbix本地邮件服务+脚本实现故障邮件通知_Zabbix6.0.4邮件故障通知_14


         附录:可以按照下面方式进行自行修改报警模板

实践案例:Zabbix本地邮件服务+脚本实现故障邮件通知_centos_15