一、Zabbix 自动发现
1. 自动发现概述
当需监控的设备数量增多,手动添加主机效率低下,可使用 自动发现(Discovery) 功能。
自动发现可实现:发现主机、添加主机、将主机加入指定主机组、链接模板等。
自动发现整体流程
- 创建自动发现规则
- 创建 Action 动作(定义发现主机后执行的操作)
- 通过动作自动完成添加主机、关联模板等行为
2. web2 被监控端部署(源码编译 Zabbix Agent)
2.1 环境准备与编译安装
将 zabbix-6.4.7.tar.gz 上传至虚拟机 web2 的 /root 目录,执行如下命令:
bash
# 安装编译依赖
[root@web2 ~]# dnf -y install gcc make pcre-devel autoconf
# 解压源码包
[root@web2 ~]# tar -xf zabbix-6.4.7.tar.gz
# 进入解压目录
[root@web2 ~]# cd zabbix-6.4.7/
# 配置编译参数,仅开启 Agent 功能
[root@web2 zabbix-6.4.7]# ./configure --enable-agent
# 编译并安装
[root@web2 zabbix-6.4.7]# make install
# 查看安装生成目录
[root@web2 ~]# ls /usr/local/etc
[root@web2 ~]# ls /usr/local/bin
[root@web2 ~]# ls /usr/local/sbin
2.2 启动 Zabbix Agent 并配置开机自启
bash
# 创建 Zabbix 运行用户,禁止登录系统
[root@web2 zabbix-6.4.7]# useradd -s /sbin/nologin zabbix
# 启动 Zabbix 客户端服务
[root@web2 zabbix-6.4.7]# zabbix_agentd
# 查看 10050 监听端口(Zabbix Agent 默认端口)
[root@web2 zabbix-6.4.7]# ss -nutlp | grep :10050
# 配置开机自启,将启动命令写入 rc.local
[root@web2 ~]# echo zabbix_agentd >> /etc/rc.d/rc.local
# 赋予 rc.local 执行权限
[root@web2 ~]# chmod +x /etc/rc.d/rc.local
3. Zabbix 服务端创建自动发现规则
- 路径:数据采集 --> 自动发现 --> 创建发现规则

- 规则参数配置:
- 名称:
web_discovery_rule - 代理程序:没有 agent 代理程序
- IP 范围:
192.168.8.105-120(可多个网段,逗号分隔) - 更新间隔:
1m(实验环境修改为1分钟,默认1小时) - 设备唯一性准则:IP 地址
- 可见名称:IP 地址

- 名称:
- 检查类型选择:SSH(只要发现的主机有SSH 22端口即可)

- 保存并启用该发现规则。
4. Zabbix 服务端创建发现动作(Action)
- 路径:告警 --> 动作 --> 发现动作 --> 创建动作

- 基础配置:
- 动作名称:
web_discovery - 状态:已启用
- 动作名称:

- 添加触发条件:
- 类型:主机 IP 地址
- 运算符:等于
- 匹配值:
192.168.8.105-120(建议与发现规则的配置一致)


- 添加执行操作:
- 将发现的主机添加至
Linux servers主机群组 - 为主机关联模板
Linux by Zabbix agent
- 将发现的主机添加至


添加至 Linux servers 主机群组

继续添加动作:

为主机关联模板 Linux by Zabbix agent

- 保存动作配置。

5. 验证与被监控端配置修复
5.1 查看主机列表
路径:监测 --> 主机 ,可看到自动发现的 web2 主机,此时主机状态为不可用。

5.2 web2 修改 Agent 配置,放行 Zabbix 服务端
bash
# 编辑 Zabbix Agent 主配置文件
[root@web2 ~]# vim /usr/local/etc/zabbix_agentd.conf
# 113行:指定允许连接的 Zabbix 服务端 IP
Server=127.0.0.1,192.168.8.100
# 178行:设置本机主机名,与 Zabbix 页面保持一致
Hostname=web2
# 强制停止原有 Agent 进程
[root@web2 ~]# killall -9 zabbix_agentd
# 重新启动 Agent
[root@web2 ~]# zabbix_agentd
# 验证 10050 端口监听
[root@web2 ~]# ss -nutlp | grep :10050
5.3 最终验证
刷新 Zabbix 主机列表,web2 主机状态变为可用,自动发现功能生效。

二、Zabbix 报警机制
1. 报警机制基础说明
- 自定义监控项默认无自动报警,首页不会展示异常提示;系统自带模板默认配置告警。
- 实现自动告警必须配置 触发器 + 告警动作 。
- 触发器(trigger):设定阈值表达式(如用户数大于50、内存低于300M),条件触发则生成事件,执行某个动作。
- 动作(action):触发器触发后执行的行为,例如发送邮件、重启服务等。
2. 创建触发器
- 数据采集 --> 模板 --> 选择模板
Template_usercount--> 触发器 --> 创建触发器


-
触发器基础配置:
- 名称:
usercount_gt_50 - 事件名称:
usercount_gt_50 - 严重性:告警
- 名称:
选择告警

- 表达式配置(阈值:用户总数大于50):
- 监控项:选择模板内自定义的
usercount监控项 - 函数:last()(取最新数值)
- 判断条件:
last(/Template_usercount/usercount) > 50
- 监控项:选择模板内自定义的


- 条件:自定义监控项的结果 大于50

点击插入
- 点击添加,启用触发器并保存。

3. 配置邮件告警媒介
3.1 启用 Email 媒介类型
路径:告警 --> 媒介 ,找到 Email 类型并启用,

配置参数:
- SMTP 服务器:
localhost(指定发送邮件的服务器,实际生产需指定专门的邮件服务器) - 发件人邮箱:
tina@test.com


这里配置的EmailEmail (HTML)是用来设置网络邮箱地址的
3.2 为管理员用户绑定收件邮箱
- 用户 --> 选择 Admin 超级管理员 --> 报警媒介 --> 添加


- 媒介选择:Email
- 收件人:
root@localhost.localdomain(管理员自己的个人邮箱) - 生效时间:
1-7,00:00-24:00,启用媒介并保存。

点击添加,点击更新

4. 创建触发器告警动作
- 路径:告警 --> 动作 --> 触发器动作 --> 创建动作


- 动作基础信息:
- 名称:
report_user - 状态:已启用
- 名称:

- 触发条件:选择触发器
Template_usercount下的usercount_gt_50



点击添加
- 操作配置:
- 操作类型:发送消息
- 接收用户:Admin(Zabbix Administrator)
- 发送媒介:Email
- 步骤持续时间:60秒
点击操作,点击添加:


- 保存动作。
5. Zabbix 服务端配置邮件服务
安装并启动 postfix 邮件服务与邮件客户端 mailx:
bash
# 安装邮件相关软件包postfix发送邮件 mailx查看邮件
[root@zabbix-server ~]# dnf -y install postfix mailx
# 启动服务并设置开机自启
[root@zabbix-server ~]# systemctl enable postfix --now
# 验证邮件服务 25 端口监听
[root@zabbix-server ~]# ss -nutlp | grep :25
6. 告警功能测试
6.1 制造告警(用户数 > 50)
在 web1 批量创建测试用户:
bash
# 批量创建 15 个用户
[root@web1 ~]# for i in {1..15}
> do
> useradd user$i
> done
# 查看系统总用户数,确认超过 50
[root@web1 ~]# wc -l /etc/passwd
6.2 查看告警邮件
在 Zabbix 服务端查看邮件:
bash
[root@zabbix-server ~]# mail
可收到主题为 Problem: usercount_gt_50 的告警邮件,输入邮件编号查看内容,按 q 退出。
6.3 解除告警(用户数 < 50)
批量删除测试用户,恢复正常状态:
bash
# 批量删除 15 个测试用户
[root@web1 ~]# for i in {1..15}
> do
> userdel -r user$i
> done
# 验证用户总数低于 50
[root@web1 ~]# wc -l /etc/passwd
服务端会收到故障恢复的通知邮件。
三、Zabbix 主动监控
1. 主动监控与被动监控区别
两种模式针对被监控端 Agent 划分,Zabbix 默认使用被动监控:
- 被动监控:Zabbix Server 主动连接 Agent 拉取数据,Agent 监听 10050 端口。
- 主动监控 :Agent 主动连接 Zabbix Server 上报数据。
- 区别在于:Server 不需要每次都链接Agent,Agent会自己收集数据并处理,Server仅负责存储数据。大幅减轻了服务端压力。
- 适用场景:监控主机数量庞大时,推荐使用主动监控或分布式监控。
2. 配置 web2 为主动监控模式
修改 web2 的 Zabbix Agent 配置文件,关闭被动、开启主动监控:
bash
[root@web2 ~]# vim /usr/local/etc/zabbix_agentd.conf
# 注释此行(被动监控的配置)
113# Server=127.0.0.1,192.168.8.100
#去掉注释,顶格写,将值改为0,标识关闭被动监控(主动监控没有端口)
138 StartAgents=0
# 指定主动上报的 Zabbix 服务端地址+端口(服务端默认 10051)
167 ServerActive=192.168.8.100:10051
#去掉注释顶格写,将值改为120,设置主动监控刷新时间
238 RefreshActiveChecks=120
重启 Agent 并验证
bash
# 强制停止原有进程
[root@web2 ~]# killall -9 zabbix_agentd
# 启动 Agent(主动模式无 10050 端口)
[root@web2 ~]# zabbix_agentd
# 仅查看进程,无需查看 10050 端口
[root@web2 ~]# ps aux | grep zabbix_agentd
3. Zabbix 服务端配置主动监控主机
- 路径:监测 --> 主机 --> 创建主机

- 主机参数配置:
- 主机名称:
web2(必须与 Agent 配置中Hostname完全一致) - 主机群组:
Linux servers - 模板:选择
Linux by Zabbix agent active(一定要指定主动监控专用模板) - 接口:不配置 Agent 接口(主动模式无需端口)
- 状态:已启用
- 主机名称:

- 保存后,主机列表中
web2标记为主动监控模式。
主动模式的Agent不再监听任何端口,本机没有端口等待外部连入

4. 验证主动监控数据
路径:监测 --> 最新数据 ,筛选主机 web2,可正常查看各项监控指标、趋势图表,主动监控配置生效。

四、监控 Nginx 服务
1. 编译部署 Nginx(开启状态模块)
实验要求 Nginx 启用 stub_status 状态模块,web1 主机操作:
1.1 安装依赖与编译 Nginx
将 nginx-1.22.1.tar.gz 上传至 web1 的 /root 目录:
bash
# 安装编译依赖
[root@web1 ~]# dnf -y install gcc pcre-devel openssl-devel make
# 创建 Nginx 运行用户
[root@web1 ~]# useradd nginx
# 解压源码包
[root@web1 ~]# tar -xf /root/nginx-1.22.1.tar.gz
# 进入源码目录
[root@web1 ~]# cd nginx-1.22.1
# 编译配置:指定安装目录、运行用户、开启ssl与状态模块
[root@web1 nginx-1.22.1]# ./configure \
> --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx \
> --with-http_ssl_module --with-http_stub_status_module
# 编译并安装
[root@web1 nginx-1.22.1]# make && make install
# 查看安装目录
[root@web1 ~]# ls /usr/local/nginx
1.2 修改 Nginx 配置,开启状态页面
bash
# 编辑 Nginx 主配置文件
[root@web1 ~]# vim /usr/local/nginx/conf/nginx.conf
# 在 server 区块内添加如下配置
location /status {
stub_status on; # 开启状态统计模块
}
# 启动 Nginx 服务
[root@web1 ~]# /usr/local/nginx/sbin/nginx
# 验证 80 端口监听
[root@web1 ~]# ss -nutlp | grep :80
1.3 访问状态页面 & 压力测试
(1)Zabbix 服务端访问 Nginx 状态页
bash
[root@zabbix-server ~]# curl 192.168.8.101/status
# 输出示例
Active connections: 1
server accepts handled requests
2 2 2
Reading: 0 Writing: 1 Waiting: 0
(2)状态字段说明
Active connections:当前客户端与 Nginx 的总连接数 = Reading + Writing + Waitingaccepts:Nginx 启动后累计接收的客户端连接总数handled:Nginx 启动后累计处理的连接总数(通常与 accepts 一致)requests:Nginx 启动后累计处理的请求总数Reading:正在读取客户端请求的连接数Writing:正在向客户端返回响应的连接数Waiting:空闲等待新请求的连接数
(3)压力测试(提升访问量)
bash
# 安装压测工具 ab
[root@zabbix-server ~]# dnf -y install httpd-tools
# 模拟 200 并发、总计 1000 次请求访问 Nginx
[root@zabbix-server ~]# ab -n1000 -c200 http://192.168.8.101/
2. 编写 Nginx 监控脚本
web1 主机编写脚本,用于抓取 Nginx 状态数据:
bash
# 创建脚本文件
[root@web1 ~]# vim /usr/local/bin/nginx_status.sh
#!/bin/bash
case $1 in
active)
curl -s http://192.168.8.101/status | awk '/Active/{print $NF}';;
waiting)
curl -s http://192.168.8.101/status | awk '/Waiting/{print $NF}';;
accepts)
curl -s http://192.168.8.101/status | awk 'NR==3{print $1}';;
esac
脚本授权与本地测试
bash
# 添加执行权限
[root@web1 ~]# chmod +x /usr/local/bin/nginx_status.sh
# 测试:当前活跃连接数
[root@web1 ~]# nginx_status.sh active
# 测试:累计连接数
[root@web1 ~]# nginx_status.sh accepts
# 测试:空闲连接数
[root@web1 ~]# nginx_status.sh waiting
3. 配置 Zabbix Agent 自定义监控项
bash
# 创建 Agent 子配置文件
[root@web1 ~]# vim /usr/local/etc/zabbix_agentd.conf.d/nginx_status.conf
# 自定义监控项,支持传参
UserParameter=nginx_status[*],/usr/local/bin/nginx_status.sh $1
# 重启 Zabbix Agent
[root@web1 ~]# killall -9 zabbix_agentd
[root@web1 ~]# zabbix_agentd
# 本地 zabbix_get 测试监控项
[root@web1 ~]# zabbix_get -s 127.0.0.1 -k nginx_status[active]
[root@web1 ~]# zabbix_get -s 127.0.0.1 -k nginx_status[accepts]
[root@web1 ~]# zabbix_get -s 127.0.0.1 -k nginx_status[waiting]
4. Zabbix 服务端创建 Nginx 监控模板与监控项
4.1 创建监控模板
路径:数据采集 --> 模板 --> 创建模板
- 模板名称:
Nginx_Monitor - 选择主机群组,保存模板。
4.2 在模板内创建监控项
进入 Nginx_Monitor 模板 --> 监控项 --> 创建监控项,按需创建多个监控项:
- 监控项1:
- 名称:
nginx_accepts - 类型:Zabbix 客户端
- 键值:
nginx_status[accepts] - 信息类型:数字(无正负)
- 更新间隔:1m
- 名称:
- 监控项2:键值
nginx_status[active](监控活跃连接) - 监控项3:键值
nginx_status[waiting](监控空闲连接)
5. 模板关联主机 & 查看监控数据
5.1 关联模板
路径:数据采集 --> 主机 --> 选择 web1 --> 模板 --> 添加 ,选中 Nginx_Monitor 模板并保存。
5.2 查看监控数据
路径:监测 --> 最新数据 ,筛选主机 web1,查看 Nginx 相关监控指标与趋势图表,数据正常采集即配置完成。
五、Zabbix 拓扑图
- 功能:通过拓扑图直观展示服务器架构、设备状态、链路关系。
- 入口:监测 --> 拓扑图,可创建新拓扑图、编辑已有拓扑。
- 基础操作:
- 添加拓扑元素(主机、图标);
- 选中两个设备,点击「链接」添加连线;
- 支持网格对齐、宏展开、尺寸调整等功能。
六、整体知识点总结
- 自动发现:解决大批量主机手动添加问题,流程为「创建发现规则 → 配置发现动作 → 自动加主机+关联模板」。
- 报警机制 :自定义监控告警依赖 触发器(阈值)+ 动作(执行行为),常用邮件告警,需配置邮件服务、告警媒介、用户收件地址。
- 主动/被动监控
- 被动:Server 主动拉取数据,Agent 监听 10050;
- 主动:Agent 主动上报数据,减轻服务端压力,适合大规模集群。
- Nginx 监控 :编译 Nginx 开启
stub_status状态模块 → 编写采集脚本 → 配置 Agent 自定义监控项 → Zabbix 创建模板/监控项 → 关联主机查看数据。 - 拓扑图:可视化展示设备架构与运行状态,便于运维直观管理集群。.1