2

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

 2 years ago
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.
neoserver,ios ssh client

   出现故障报警的时候,可以通过不同方式通知管理员进行故障处理,尽快恢复业务。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" [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接收邮箱通信信息

#### 测试中发现QQ邮箱开始是无法收到非正常域名的邮件的,也不在垃圾邮件中。后面通过下面的方式精准地写好白名单后可以在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本地邮件服务+脚本实现故障邮件通知_qq邮箱
实践案例:Zabbix本地邮件服务+脚本实现故障邮件通知_Zabbix 事件通知机制_02

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

实践案例:Zabbix本地邮件服务+脚本实现故障邮件通知_qq邮箱_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 [email protected] "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本地邮件服务+脚本实现故障邮件通知_Zabbix 事件通知机制_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本地邮件服务+脚本实现故障邮件通知_Zabbix6.0.4邮件故障通知_06
实践案例:Zabbix本地邮件服务+脚本实现故障邮件通知_centos_07

4.3 创建动作

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

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

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

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

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

      停掉IP88上的Nginx服务

[root@CentOS84-IP88 ]#systemctl stop nginx

      监测 ---- 主机

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

       QQ收到对应的三个邮件

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

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

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

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

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

Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK