出现故障报警的时候,可以通过不同方式通知管理员进行故障处理,尽快恢复业务。Zabbix 事件通知机制:邮件通知、短信通知、微信企业服务通知。
邮件通知又分成多种方式:本地邮件服务器通知、本地邮件服务结合脚本通知、借助企业邮箱和第三方授权码方式实现邮件通知等。但是目前好多第三方邮件服务商关闭了免费用户的Zabbix通知邮件发送,所以建议大家还是自建方式来完成,或者付费邮箱和提供上确定好保证授权码发送可用性来完成实际生产环境中的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" nj_xjz@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
EOT
Null message body; hope that's 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 ]#ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:10051 0.0.0.0:*
LISTEN 0 128 0.0.0.0:111 0.0.0.0:*
LISTEN 0 511 0.0.0.0:80 0.0.0.0:*
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 5 127.0.0.1:631 0.0.0.0:*
LISTEN 0 128 0.0.0.0:10050 0.0.0.0:*
LISTEN 0 128 [::]:10051 [::]:*
LISTEN 0 128 [::]:111 [::]:*
LISTEN 0 511 [::]:80 [::]:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 5 [::1]:631 [::]:*
LISTEN 0 128 [::]:10050 [::]:*
[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 128 0.0.0.0:10051 0.0.0.0:*
LISTEN 0 128 0.0.0.0:111 0.0.0.0:*
LISTEN 0 511 0.0.0.0:80 0.0.0.0:*
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 5 127.0.0.1:631 0.0.0.0:*
LISTEN 0 100 127.0.0.1:25 0.0.0.0:*
LISTEN 0 128 0.0.0.0:10050 0.0.0.0:*
LISTEN 0 128 [::]:10051 [::]:*
LISTEN 0 128 [::]:111 [::]:*
LISTEN 0 511 [::]:80 [::]:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 5 [::1]:631 [::]:*
LISTEN 0 100 [::1]:25 [::]:*
LISTEN 0 128 [::]:10050 [::]:*
[root@CentOS84-IP18 ]#echo "zabbix test mail" | mail -s "zabbix" nj_xjz@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 设置白名单
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 ]#bash /usr/lib/zabbix/alertscripts/mailx.sh 1050572574@qq.com "hello,shone welcome you Success!" "666666"
3.2 脚本发送邮件在接收端QQ邮箱验证
4. Zabbix Web创建报警媒介类型
报警媒介类型是一种给运维工程师发送消息通知的渠道,即当zabbix 的触发器触发一个事件后,怎么才能把这个 事件通过某些方式通知给运维工程师呢?那么媒介类型就起到这样的作用,媒介类型创建好之后,需要在每个账户 里面添加相应的收件配置,比如邮件类型的媒介类型要给zabbix账户添加邮箱,如果是微信类型的媒介类型那么就要在zabbix账户设置微信号,同样的到来,短信类型的媒介类型那就得给zabbix账户设置手机号用于接收报警消息内容。 管理-->报警媒介类型-->创建媒体类型
5. 给用户添加报警报警媒介:
管理 ---- 用户 ------ 点击Admin(或自己想指定的用户) ------ 报警媒介 ---- 添加 -----(退回到上一个窗口)点击更新
创建动作: 动作是对zabbix 触发器触发后生成的事件的具体处理操作,可以是远程执行命令,也可以是发送通知给指定的管 理员进行故障处理,发送命令是调用的上一步骤创建好的报警媒介类型。
配置 --> 动作 --> trigger actions动作 --> 创建动作:
6. 验证
