

实践案例:Zabbix本地邮件服务+脚本实现故障邮件通知
source link: https://blog.51cto.com/shone/5341784
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

出现故障报警的时候,可以通过不同方式通知管理员进行故障处理,尽快恢复业务。Zabbix6.0.4 事件通知机制:邮件通知、短信通知、微信企业服务通知。
邮件通知又可分成多种方式:本地邮件服务器通知、本地邮件服务结合脚本通知、借助第三方提供的企业邮箱和授权码方式实现邮件通知等。但是目前好多第三方邮件服务商关闭了免费用户的Zabbix通知邮件发送转接功能,所以建议大家还是自建方式来完成,或者付费购买邮箱,要求服务商提供并保证授权码认证转发绝对可用,这样来保障实际生产环境中的Zabbix邮箱通知的稳定行和有效性。
本文在实验环境下实现本地邮件服务结合shell脚本实现Zabbix邮件通知。
1. 在Zabbix-Server上配置本地邮件服务
[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" [email protected]
/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" [email protected]
[root@CentOS84-IP18 ]#
2. 设置接收邮箱白名单
2.1 获取本地邮件服务和QQ接收邮箱通信信息
[root@CentOS84-IP18 ]#hostname
CentOS84-IP18
#### 特别提示,发两次这个邮件就会送到回复设备的邮件,内就有全部的发送邮箱格式可以提取出来!!!
[root@CentOS84-IP18 ]#echo "zabbix test mail" | mail -s "zabbix" [email protected]
[root@CentOS84-IP18 ]#echo "zabbix test mail" | mail -s "zabbix" [email protected]
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
## 下面这段有很多内容,稍微看下就能看到 [email protected] 是这台主机发出的带本地域名后缀的邮箱格式,这个地址可以加入到QQ邮箱白名单就可以接收到邮件了。
[root@CentOS84-IP18 ]#cat /var/spool/mail/root
........................
From MAILER-DAEMON Sun May 29 19:55:44 2022
Return-Path: <>
X-Original-To: [email protected]
Delivered-To: [email protected]
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: [email protected] (Mail Delivery System)
Subject: Undelivered Mail Returned to Sender
To: [email protected]
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: <[email protected]>
............................
[root@CentOS84-IP18 ]#
2.2 设置白名单


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

3. 告警脚本
3.1 脚本编写
/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 [email protected] "hello,shone welcome you Success!" "666666"
3.2 脚本发送邮件在接收端QQ邮箱验证

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

脚本名称: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(或自己想指定的用户) ------ 报警媒介 ---- 添加 -----(退回到上一个窗口)点击更新


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


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


停掉IP88上的Nginx服务
监测 ---- 主机

QQ收到对应的三个邮件

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

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

Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK