目录
简介
在现代运维工作中,一个高效的监控系统能够实现自动化管理,极大减轻运维人员的负担。Zabbix作为一款强大的开源监控工具,提供了自动发现、自动注册、自定义监控以及告警通知等一系列高级功能。本文将详细介绍这些功能的实现过程,附带完整的命令解释和配置说明,帮助运维人员快速掌握Zabbix的企业级应用。
一、Zabbix网络自动发现
Zabbix的网络自动发现功能能够在指定IP范围内自动检测并管理主机,特别适合快速部署和动态变化的IT环境。其核心优势在于加快部署速度、简化管理流程,并避免过度管理。
1.1 环境准备
本次实战环境使用openEuler 24.03操作系统,具体资源清单如下:
操作系统 |
配置 |
主机名 |
IP地址 |
角色 |
openEuler 24.03 |
2C4G |
zabbix |
192.168.207.137 |
Zabbix服务端 |
openEuler 24.03 |
2C4G |
server01 |
192.168.207.138 |
被监控节点 |
openEuler 24.03 |
2C4G |
server02 |
192.168.207.139 |
被监控节点 |
1.2 客户端配置Zabbix Agent
在所有被监控节点(以server01为例)上配置Zabbix Agent,使其能够与服务端通信:
[root@server01 ~]# vim /etc/zabbix/zabbix_agentd.conf
配置文件关键参数说明:
# 指定Zabbix服务端IP,允许该IP从Agent获取数据(被动模式)
Server=192.168.207.137
# 指定Zabbix服务端IP,Agent主动向该IP发送数据(主动模式)
ServerActive=192.168.207.137
# 主机名,需与服务端配置一致
Hostname=server01
配置完成后重启Agent使配置生效:
[root@server01 ~]# systemctl restart zabbix-agent
1.3 创建网络自动发现规则
通过Zabbix Web界面创建自动发现规则,步骤如下:
- 登录Zabbix Web界面,导航至「数据采集」→「自动发现」→「创建发现规则」
- 配置关键参数:
- 名称:自定义规则名称(如“自动发现规则”)
- 由agent代理程序自动发现:选择“No proxy”(由服务端直接执行)
- IP范围:指定待发现的IP地址范围,支持多种格式:
- 单个IP:
192.168.207.138
- 范围:
192.168.207.1-255
- 子网:
192.168.207.0/24
- 混合列表:
192.168.207.138,192.168.207.139,192.168.4.0/24
- 更新间隔:设置规则执行频率(如60秒)
- 检查:配置发现方式,选择“Zabbix客户端”,端口10050,键值
system.uname
(获取系统信息) - 设备唯一性准则:选择“IP地址”或“Zabbix客户端:system.uname”,避免重复发现
- 已启用:勾选启用规则
1.4 创建自动发现动作
发现主机后,需要通过动作配置自动执行的操作(如添加主机、关联模板等):
- 导航至「告警」→「动作」→「发现动作」→「创建动作」
- 配置动作参数:
- 名称:自定义动作名称(如“自动发现动作”)
- 条件:关联之前创建的发现规则
- 配置操作(「操作」选项卡):
- 添加主机:自动将发现的主机添加到Zabbix
- 添加到主机群组:选择目标主机组(如“Linux servers”)
- 链接到模板:关联监控模板(如“Linux by Zabbix agent”)
1.5 验证自动发现效果
- 查看发现状态:导航至「监测」→「自动发现」,确认已发现目标主机
- 查看主机列表:导航至「数据采集」→「主机」,确认发现的主机已被添加并关联模板
二、Zabbix自动注册
自动注册适用于未知IP地址范围的场景,由Agent主动向服务端发起注册请求,简化动态环境的管理。
2.1 清理自动发现配置
若已配置自动发现,需先清理相关配置避免冲突:
- 删除「告警」→「动作」中的发现动作
- 删除「数据采集」→「自动发现」中的发现规则
- 删除「数据采集」→「主机」中通过自动发现添加的主机
2.2 配置Agent自动注册参数
修改Agent配置文件,启用自动注册功能:
[root@server01 ~]# vim /etc/zabbix/zabbix_agentd.conf
关键参数说明(补充或修改):
# 必须配置,Agent通过该地址主动注册
ServerActive=192.168.207.137
# 可选参数:通过系统函数获取主机名(当Hostname未配置时生效)
# HostnameItem=system.hostname
# 可选参数:自定义主机元数据,用于服务端识别主机类型
# HostMetadata=Linux_host
重启Agent:
[root@server01 ~]# systemctl restart zabbix-agent
2.3 创建自动注册动作
- 导航至「告警」→「动作」→「自动注册动作」→「创建动作」
- 配置动作参数:
- 名称:自定义名称(如“自动注册动作”)
- 条件:可根据HostMetadata过滤主机(如“Host metadata包含Linux”)
- 配置操作(与自动发现动作类似):
- 添加主机至主机组
- 关联监控模板(如“Linux by Zabbix agent”)
2.4 验证自动注册效果
导航至「数据采集」→「主机」,确认Agent已主动注册并显示在主机列表中。
三、监控Nginx服务
Zabbix通过内置Key可满足大部分监控需求,对于特殊场景(如Nginx状态监控),需通过自定义Key实现。
3.1 部署Nginx并启用状态模块
在被监控节点(如server01)上部署Nginx并启用状态统计模块:
- 添加Nginx源:
[root@server01 ~]# cat > /etc/yum.repos.d/nginx.repo << "EOF"
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/8/x86_64
gpgcheck=0
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/centos/8/x86_64
gpgcheck=0
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF
- 安装Nginx:
[root@server01 ~]# dnf -y install nginx
- 配置Nginx状态页面:
[root@server01 ~]# vim /etc/nginx/conf.d/default.conf
在server
块中添加以下配置:
location /nginx_status {
stub_status on; # 启用状态统计
access_log off; # 关闭该路径的访问日志
}
- 启动Nginx并设置开机自启:
[root@server01 ~]# systemctl start nginx
[root@server01 ~]# systemctl enable nginx
3.2 编写Nginx状态监控脚本
通过脚本解析Nginx状态页面数据,供Zabbix调用:
[root@server01 ~]# vim /etc/zabbix/nginx-status.sh
脚本内容及说明:
#!/bin/bash
# 定义Nginx端口
NGINX_PORT=80
# 接收参数(如active、reading等)
NGINX_COMMAND=$1
# 获取活动连接数
nginx_active(){
/usr/bin/curl -s "http://127.0.0.1:${NGINX_PORT}/nginx_status/" | awk '/Active/{print $3}'
}
# 获取读取客户端Header的数量
nginx_reading(){
/usr/bin/curl -s "http://127.0.0.1:${NGINX_PORT}/nginx_status/" | awk '/Reading/{print $2}'
}
# 获取向客户端发送Header的数量
nginx_writing(){
/usr/bin/curl -s "http://127.0.0.1:${NGINX_PORT}/nginx_status/" | awk '/Writing/{print $4}'
}
# 获取等待请求的连接数
nginx_waiting(){
/usr/bin/curl -s "http://127.0.0.1:${NGINX_PORT}/nginx_status/" | awk '/Waiting/{print $6}'
}
# 获取总接受连接数
nginx_accepts(){
/usr/bin/curl -s "http://127.0.0.1:${NGINX_PORT}/nginx_status/" | awk 'NR==3 {print $1}'
}
# 获取总处理连接数
nginx_handled(){
/usr/bin/curl -s "http://127.0.0.1:${NGINX_PORT}/nginx_status/" | awk 'NR==3 {print $2}'
}
# 获取总请求数
nginx_requests(){
/usr/bin/curl -s "http://127.0.0.1:${NGINX_PORT}/nginx_status/" | awk 'NR==3 {print $3}'
}
# 根据参数执行对应函数
case $NGINX_COMMAND in
active) nginx_active ;;
reading) nginx_reading ;;
writing) nginx_writing ;;
waiting) nginx_waiting ;;
accepts) nginx_accepts ;;
handled) nginx_handled ;;
requests) nginx_requests ;;
*) echo "USAGE: $0 {active|reading|writing|waiting|accepts|handled|requests}" ;;
esac
设置脚本可执行权限:
[root@server01 ~]# chmod +x /etc/zabbix/nginx-status.sh
3.3 配置自定义Key
在Agent配置文件中定义自定义Key,关联监控脚本:
[root@server01 ~]# vim /etc/zabbix/zabbix_agentd.conf
添加以下配置:
# 启用自定义Key功能(默认0禁用,1启用)
UnsafeUserParameters=1
# 定义自定义Key:nginx_status[*],参数通过$1传递给脚本
UserParameter=nginx_status[*],/etc/zabbix/nginx-status.sh $1
重启Agent:
[root@server01 ~]# systemctl restart zabbix-agent
3.4 在服务端验证自定义Key
在Zabbix服务端使用zabbix_get
工具测试自定义Key是否生效:
# 安装zabbix_get(若未安装)
[root@zabbix ~]# dnf -y install zabbix-get
# 测试获取活动连接数
[root@zabbix ~]# zabbix_get -s 192.168.207.138 -k nginx_status[active]
# 测试获取Nginx端口状态(内置Key)
[root@zabbix ~]# zabbix_get -s 192.168.207.138 -k net.tcp.port[,80]
3.5 创建Nginx监控模板
- 导航至「数据采集」→「模板」→「创建模板」,命名为“Nginx-status”
- 为模板添加监控项(「监控项」→「创建监控项」):
监控项名称 |
键值 |
说明 |
nginx active |
nginx_status[active] |
活动连接数 |
nginx reading |
nginx_status[reading] |
读取客户端Header数 |
nginx writing |
nginx_status[writing] |
发送客户端Header数 |
nginx waiting |
nginx_status[waiting] |
等待请求的连接数 |
nginx accepts |
nginx_status[accepts] |
总接受连接数 |
nginx port |
net.tcp.port[,80] |
80端口状态(1开启,0关闭) |
- 添加触发器(如Nginx端口关闭时告警):
- 导航至「触发器」→「创建触发器」
- 条件:
net.tcp.port[,80] = 0
(端口关闭) - 严重级别:设置为“警告”或“严重”
3.6 应用模板至主机
将创建的“Nginx-status”模板关联到目标主机(server01):
- 导航至「数据采集」→「主机」→ 选择server01
- 「模板」→「链接新模板」→ 选择“Nginx-status”→「添加」
四、Zabbix邮件报警
当监控指标触发告警时,Zabbix可通过邮件自动通知运维人员,及时响应故障。
4.1 配置告警媒介(邮件服务器)
- 导航至「告警」→「媒介」→ 选择“Email”→「编辑」
- 配置邮件服务器参数:
- SMTP服务器:如
smtp.163.com
(网易邮箱) - SMTP服务器端口:465(SSL加密)
- SMTP HELO:邮件服务器域名(如
163.com
) - SMTP邮箱:发送告警的邮箱地址
- 认证:选择“用户名和密码”
- 用户名:发送邮箱的账号
- 密码:邮箱的授权码(非登录密码,需在邮箱设置中开启SMTP并获取)
- 勾选「已启用」,点击「更新」
4.2 配置用户告警媒介
为用户(如Admin)关联邮件告警媒介:
- 导航至「用户」→「用户」→ 选择“Admin”→「报警媒介」→「添加」
- 配置参数:
- 类型:选择“Email”
- 收件人:接收告警的邮箱地址
- 当启用时:设置告警生效时间(如00:00-24:00)
- 严重性:勾选需要通知的告警级别(如“警告”、“严重”)
- 点击「添加」并「更新」
4.3 创建触发器动作
配置当触发器触发时执行的动作(发送邮件):
- 导航至「告警」→「动作」→「触发器动作」→「创建动作」
- 配置动作名称(如“Nginx告警动作”)
- 配置触发条件(「条件」选项卡):
- 选择“触发器”,关联之前创建的Nginx触发器(如“Nginx port is down”)
- 配置操作(「操作」选项卡):
- 操作类型:选择“发送消息”
- 发送到用户:选择Admin
- 仅送到:选择“Email”
- 消息内容:自定义告警内容,如:
问题:{TRIGGER.NAME}
主机:{HOST.NAME}
时间:{EVENT.DATE} {EVENT.TIME}
状态:{TRIGGER.STATUS}
4.4 测试邮件告警
手动关闭被监控节点的Nginx服务,验证告警是否触发:
[root@server01 ~]# systemctl stop nginx
等待片刻后,查看接收告警的邮箱,确认是否收到告警邮件。测试完成后重启Nginx:
[root@server01 ~]# systemctl start nginx
总结
本文介绍了Zabbix的四个应用:网络自动发现、自动注册、自定义Key监控Nginx、邮件告警。通过这些功能,运维人员可实现主机自动管理、服务深度监控和故障及时通知,显著提升运维效率。在实际应用中,需根据环境特点选择自动发现或自动注册,并合理配置自定义监控项和告警策略,构建稳定高效的监控体系。