Zabbix 监控系统触发器、报警、邮箱方位指南
Zabbix 监控系统触发器、报警、邮箱方位指南
触发器配置
- 触发器作用:设定监控项的临界条件,当数据满足条件时触发状态变化(正常→问题),为报警提供触发机制(如登录用户数大于 20 个时触发警告)
- 创建触发器(以登录用户数为例):在模板中进入 “触发器 - 创建触发器”,填写名称(登录用户数大于 20 个)、选择严重性(如警告),点击 “表达式” 后的 “添加”,选择监控项(Template test: 登录用户数)、功能(last (),最新值)、条件(>20),生成表达式(如
{Template test:loginusers.last()} > 20
),点击 “添加” - 触发器验证:在 agent1 打开多个终端使登录用户数超过 20,Web 界面 “问题” 板块会显示触发的警告信息,图形中也会标注触发点
报警配置(基于 OneAlert 平台)
- 报警原理:触发器触发后,通过 “动作” 将通知发送给指定用户,用户通过 “报警媒介”(邮件、微信、短信等)接收信息;OneAlert 等平台可简化报警对接,无需自行开发接口
- OneAlert 配置步骤
- 平台注册与应用创建:注册 OneAlert 账号,创建 Zabbix 应用,获取 AppKey
- Server 端安装报警 Agent:进入
/usr/lib/zabbix/alertscripts
,下载并解压 OneAlert Agent 包,执行安装脚本(bash install.sh AppKey
),输入 Zabbix 管理地址、管理员账号密码 - 验证报警配置:OneAlert 会自动在 Zabbix 中添加报警动作、用户(cloudalert)、报警媒介类型(cloudalert media);触发触发器后,查看 OneAlert 平台与绑定的通知渠道(如邮箱、微信),确认是否收到报警信息
Zabbix 邮箱告警通过配置本地邮箱、第三方邮箱或第三方邮箱 + 脚本三种方式,实现触发器触发时自动向运维人员发送邮件通知,解决无法 24 小时盯守 Web 界面的问题。以下是具体配置步骤与验证方法
Zabbix 邮箱告警配置
Zabbix 邮箱告警通过配置本地邮箱、第三方邮箱或第三方邮箱 + 脚本三种方式,实现触发器触发时自动向运维人员发送邮件通知,解决无法 24 小时盯守 Web 界面的问题。以下是具体配置步骤与验证方法
前期环境准备
在配置任何邮箱告警前,需完成基础环境搭建,确保告警流程正常运行
-
关闭防火墙与 SELinux:分别在 Zabbix Server 和 Agent 端执行命令,关闭防火墙(
systemctl stop firewalld; systemctl disable firewalld
),临时关闭 SELinux(setenforce 0
) -
设置主机名:Server 端设置主机名为
zabbix-server.example.com
(hostnamectl set-hostname --static zabbix-server.example.com
),Agent 端设置为zabbix-agent.example.com
-
配置 hosts 文件
:在 Server 和 Agent 端的
/etc/hosts
文件中添加如下内容,实现主机名解析:
192.168.100.40 zabbix-server.example.com zabbix-server 192.168.100.30 zabbix-agent.example.com zabbix-agent
二、本地邮箱告警配置(基于 Postfix)
本地邮箱依赖 Postfix 服务实现邮件发送,适用于仅需内部通知的场景
1. 安装并配置 Postfix 服务
-
安装 Postfix 软件:在 Server 端执行
yum -y install postfix
-
修改主配置文件:编辑
/etc/postfix/main.cf
,将
mydestination
参数修改为:
mydestination = $myhostname, localhost.$mydomain, localhost,$mydomain
-
启动并设置开机自启:执行
systemctl restart postfix.service
重启服务,systemctl enable postfix.service
设置开机生效
2. 配置 Zabbix 报警媒介类型
- 登录 Zabbix Web 界面,进入配置 → 报警媒介类型 → 创建媒体类型
- 按以下参数配置:
- 名称:Email
- 类型:电子邮件
- SMTP 服务器:localhost
- SMTP 服务器端口:25
- SMTP HELO:localhost
- SMTP 电邮:chenyu@example.com(自定义本地邮箱地址)
- 安全链接:STARTTLS
- 认证:无
- Message format:HTML
- 勾选 “已启用”,点击 “更新” 保存
3. 配置用户报警媒介
- 进入管理 → 用户 → 选择目标用户(如 Admin)→ 报警媒介 → 添加。
- 配置参数:
- 类型:选择已创建的 “Email”
- 收件人:填写接收告警的邮箱(如 chenyu@example.com)
- 其他参数默认,点击 “添加”
4. 配置动作(触发告警时发送邮件)
- 进入配置 → 动作 → 创建动作,事件源选择 “触发器”
- 配置动作基本信息:
- 名称:Report problems to Zabbix administrators
- 条件:默认或按需添加(如触发器状态 = 问题)
- 配置操作:
- 操作类型:发送消息
- 发送到用户群组:Zabbix administrators(或指定用户组)
- 发送媒介:所有介质(或仅 Email)
- 勾选 “已启用”,点击 “更新”
5. 验证告警效果
在 Agent 端通过多开终端使登录用户数超过 6 个(触发预设触发器),查看目标邮箱是否收到告警邮件,邮件应包含问题名称、主机、时间等信息
三、第三方邮箱告警配置(以 163 邮箱为例)
第三方邮箱(如 163、QQ 邮箱)适用于跨网络通知场景,需开启 SMTP 服务并获取授权码
1. 准备第三方邮箱(163 邮箱)
- 注册 163 邮箱,登录后进入设置 → POP3/SMTP/IMAP
- 开启 “IMAP/SMTP 服务” 和 “POP3/SMTP 服务”,系统会生成一个授权码,记录该授权码(后续配置需使用)
2. 配置 Zabbix 报警媒介类型
- 进入配置 → 报警媒介类型 → 选择或创建 “Email” 类型
- 按以下参数配置(替换为 163 邮箱信息):
- SMTP 服务器:smtp.163.com
- SMTP 服务器端口:465(SSL 端口)
- SMTP HELO:smtp.163.com
- SMTP 电邮:cy18271663615@163.com(你的 163 邮箱)
- 安全链接:SSL/TLS
- 认证:用户名和密码
- 用户名:cy18271663615@163.com
- 密码:163 邮箱生成的授权码
- Message format:HTML
- 点击 “测试”,输入收件人邮箱,发送测试邮件,确认 163 邮箱能收到测试邮件
3. 验证告警效果
重复 “本地邮箱” 的用户报警媒介和动作配置,在 Agent 端触发触发器(如登录用户数超 6),查看 163 邮箱:
- 问题触发时,收到 “Problem” 主题的告警邮件
- 问题修复后(登录用户数少于 6),收到 “Resolved” 主题的恢复邮件
四、第三方邮箱 + 脚本告警配置(基于 s-nail)
通过脚本结合 s-nail 工具发送邮件,灵活性更高,适用于需自定义邮件内容的场景
1. 安装并配置 s-nail 工具
-
安装 s-nail:在 Server 端执行
yum -y install s-nail
-
修改配置文件:编辑
/etc/s-nail.rc
,添加以下内容(替换为 163 邮箱信息):
set from=cy18271663615@163.com set smtp=smtp.163.com set smtp-auth-user=cy18271663615@163.com set smtp-auth-password=163邮箱授权码 set smtp-auth=login set ssl-verify=ignore
-
设置权限:执行
chown -R zabbix:zabbix /etc/s-nail.rc
,确保 Zabbix 用户可读取
2. 编写邮件发送脚本
-
进入 Zabbix 脚本目录:
cd /usr/lib/zabbix/alertscripts
-
创建脚本
mail-send.sh
:
#!/bin/bash messages=`echo $3 | tr '\r\n' '\n'` subject=`echo $2 | tr '\r\n' '\n'` echo "${messages}" | s-nail -s "${subject}" $1
-
设置权限:执行
chown -R zabbix:zabbix mail-send.sh
和chmod +x mail-send.sh
-
测试脚本:执行
./mail-send.sh cy18271663615@163.com "zabbix test mail" "test"
,确认 163 邮箱收到测试邮件
3. 配置 Zabbix 报警媒介与动作
-
创建报警媒介类型:进入配置 → 报警媒介类型 → 创建媒体类型,类型选择 “脚本”,脚本名称填写
mail-send.sh
,其他参数默认 -
配置用户报警媒介:进入用户的 “报警媒介”,添加类型为刚创建的脚本媒介,收件人填写 163 邮箱
-
配置动作
:进入配置 → 动作
,创建动作,操作类型选择 “发送消息”,发送媒介选择脚本媒介,消息内容可自定义(如包含问题时间、主机、严重级别等):
Problem started at {EVENT.TIME} on {EVENT.DATE} Problem name: {EVENT.NAME} Host: {HOST.NAME} Severity: {EVENT.SEVERITY} Original problem ID: {EVENT.ID} {TRIGGER.URL}
4. 验证告警效果
在 Agent 端触发触发器(登录用户数超 6),163 邮箱会收到脚本发送的告警邮件;问题修复后,收到恢复邮件,邮件内容与动作配置的格式一致
具体示例:
配置报警信息可以通过邮箱来实现
1、本地邮箱
2、第三方邮箱
3、第三方邮箱+脚本
前期准备环境
确保zabbix-server和zabbix-agent端的防火墙和selinux处于关闭状态
分别修改server和zabbix-agent端的/etc/hosts文件
server:
[root@server ~]# cd /var/spool/mail/
[root@server mail]# ls
shenyi
[root@server mail]# hostname
server.example.com
[root@server mail]# vim /etc/hosts192.168.100.5 server.example.com server
192.168.100.10 zabbix-agent.example.com zabbix-agent
~
zabbix-agent:
[root@zabbix-agent ~]# vim /etc/hosts192.168.100.5 server.example.com server
192.168.100.10 zabbix-agent.example.com zabbix-agent
~
本地邮箱告警配置
安装postfix软件
[root@server ~]# yum -y install postfix
修改postfix的主配置文件,并重启服务和设置下次启动生效
[root@server ~]# vim /etc/postfix/main.cf //在该行后面加上$mydomain
...
mydestination = $myhostname, localhost.$mydomain, localhost,$mydomain
...
[root@server ~]# systemctl restart postfix.service
[root@server ~]# systemctl enable postfix.service
Created symlink /etc/systemd/system/multi-user.target.wants/postfix.service → /usr/lib/systemd/system/postfix.service.
配置报警媒介类型:
触发器
虽然我们可以通过图形查看到监控的数据,但我们不可能一直盯着图形的变化
所以需要定义监控项到达一个临界值(阈值)或者满足一个条件,就会发生状态变化的通知
定义触发器(trigger)就是定义这个临界值(阈值)或条件.
监控项有无限种可能,触发器也一样有无限种可能。如:
cpu负载值大于某个值则通知
登录用户数大于某个值则通知
内存空闲率小于某个值则通知
磁盘使用率大于某个值则通知
主机名被修改则通知
等等,主要还是看需求
创建登录用户数过多的触发器
在模板里创建触发器
配置触发器:
验证创建成功:
登录数大于5后:
[root@zabbix-agent ~]# who | wc -l
6
配置动作:
配置用户报警媒介:
验证
Agent1端连接用户超过6个
[root@server mail]# cat shenyi
....
From shenyi@example.com Thu Oct 16 19:37:37 2025
Return-Path: <shenyi@example.com>
X-Original-To: shenyi@example.com
Delivered-To: shenyi@example.com
Received: from example.com (localhost [IPv6:::1])by server.example.com (Postfix) with SMTP id 7C2E161D5D77for <shenyi@example.com>; Thu, 16 Oct 2025 19:37:37 +0800 (CST)
From: <shenyi@example.com>
To: <shenyi@example.com>
In-Reply-To: <133.5cc020ecb31ff35ad2a8fb85c616e305.1.a972f9cb9e15ff9ecd67ab9ca6650a67@zabbix.com>
Date: Thu, 16 Oct 2025 19:37:37 +0800
Subject: =?UTF-8?B?cHJvYmxlbTog55So5oi355m75b2V5pWw?=
MIME-Version: 1.0
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: base64
Message-Id: <20251016113737.7C2E161D5D77@server.example.com>cHJvYmxlbSBzdGFydCBhdCAxOTozNzozNyBvbiAyMDI1LjEwLjE2DQpwcm9ibGVtIG5hbWU6IOeU
qOaIt+eZu+W9leaVsA0KaG9zdDogemFiYml4LWFnZW50MQ0Kc2V2ZXJpdHk6IFdhcm5pbmcNCg0K
b3JpZ2luYWwgcHJvYmxlbSBJRDogMTMzDQo=
[root@server mail]# cat shenyi
....
From shenyi@example.com Thu Oct 16 19:59:34 2025
Return-Path: <shenyi@example.com>
X-Original-To: shenyi@example.com
Delivered-To: shenyi@example.com
Received: from example.com (localhost [IPv6:::1])by server.example.com (Postfix) with SMTP id 9010D61D5D75for <shenyi@example.com>; Thu, 16 Oct 2025 19:59:34 +0800 (CST)
From: <shenyi@example.com>
To: <shenyi@example.com>
In-Reply-To: <0.5cc020ecb31ff35ad2a8fb85c616e305.1.a972f9cb9e15ff9ecd67ab9ca6650a67@zabbix.com>
Date: Thu, 16 Oct 2025 19:59:34 +0800
Subject: test ///////
MIME-Version: 1.0
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: base64
Message-Id: <20251016115934.9010D61D5D75@server.example.com>dGVzdDEyMw==
zabbix-agent:
[root@zabbix-agent ~]# yum -y install postfix
[root@zabbix-agent ~]# vim /etc/postfix/main.cf
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
[root@zabbix-agent ~]# systemctl restart postfix.service
[root@zabbix-agent ~]# systemctl enable postfix
[root@zabbix-agent ~]# yum -y install mailx[root@zabbix-agent ~]# echo "123" | mail -s "test" shenyi@example.com
[root@zabbix-agent ~]# cd /var/spool/mail/
[root@zabbix-agent mail]# ls
root rpc shenyi shenyifeng
[root@zabbix-agent mail]# cat shenyi
From root@zabbix-agent.example.com Thu Oct 16 20:10:17 2025
Return-Path: <root@zabbix-agent.example.com>
X-Original-To: shenyi@example.com
Delivered-To: shenyi@example.com
Received: by zabbix-agent.example.com (Postfix, from userid 0)id DA07C416F685; Thu, 16 Oct 2025 20:10:17 +0800 (CST)
Date: Thu, 16 Oct 2025 20:10:17 +0800
To: shenyi@example.com
Subject: test
User-Agent: Heirloom mailx 12.5 7/5/10
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-Id: <20251016121017.DA07C416F685@zabbix-agent.example.com>
From: root@zabbix-agent.example.com (root)123
第三方邮箱警告配置
注册163邮箱
开启SMTP服务和POP3服务,会生成一个授权码,需要记住这个授权码
修改报警媒介类型–email
密码就是授权码
再次测试,agent1连接数超过6个时,看163邮箱是否能收到邮件
[root@zabbix-agent ~]# who | wc -l
6
当连接数少于6个的时候,修复好了,163邮箱会再次收到修复成功的邮件
第三方邮箱+脚本告警配置
安装s-nail软件包并修改s-nail配置文件
server:
[root@server ~]# yum -y install s-nail
[root@server ~]# vim /etc/s-nail.rc set from=syf02161016@163.com
set smtp=smtp.163.com
set smtp-auth-user=syf02161016@163.com
set smtp-auth-password=HPuAUtcHGVZRZTX2
set smtp-auth=login
set ssl-verify=ignore
~
[root@server ~]# chown -R zabbix:zabbix /etc/s-nail.rc
在zabbix服务端写邮件发送脚本
[root@server ~]# vim /usr/lib/zabbix/alertscripts/mail-send.sh
#!/bin/bash
messages=`echo $3 | tr '\r\n' '\n'`
subject=`echo $2 | tr '\r\n' '\n'`
echo "${messages}" | s-nail -s "${subject}" $1
~
[root@server ~]# cd /usr/lib/zabbix/alertscripts/
[root@server alertscripts]# chown -R zabbix:zabbix mail-send.sh
[root@server alertscripts]# chmod +x mail-send.sh
测试邮箱能否接收邮件
[root@server alertscripts]# ./mail-send.sh syf02161016@163.com "zabbix test" "test111"
s-nail: Warning: variable superseded or obsoleted: smtp
s-nail: Warning: variable superseded or obsoleted: smtp-auth-user
s-nail: Warning: variable superseded or obsoleted: smtp-auth-password
s-nail: Warning: variable superseded or obsoleted: ssl-verify
s-nail: Obsoletion warning: please do not use *smtp*, instead assign a smtp:// URL to *mta*!
s-nail: Obsoletion warning: Use of old-style credentials, which will vanish in v15!
s-nail: Please read the manual section "On URL syntax and credential lookup"
创建报警媒介类型
给用户添加邮箱:
验证–agent1连接数超过6个:
[root@zabbix-agent ~]# who | wc -l
6
修复好后,仍然可以接收邮件