一、Zabbix 自动发现

1. 自动发现概述

当需监控的设备数量增多,手动添加主机效率低下,可使用 自动发现(Discovery) 功能。
自动发现可实现:发现主机、添加主机、将主机加入指定主机组、链接模板等。

自动发现整体流程
  1. 创建自动发现规则
  2. 创建 Action 动作(定义发现主机后执行的操作)
  3. 通过动作自动完成添加主机、关联模板等行为

2. web2 被监控端部署(源码编译 Zabbix Agent)

2.1 环境准备与编译安装

zabbix-6.4.7.tar.gz 上传至虚拟机 web2/root 目录,执行如下命令:

# 安装编译依赖
[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 并配置开机自启
# 创建 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 服务端创建自动发现规则

  1. 路径:数据采集 --> 自动发现 --> 创建发现规则

请添加图片描述

  1. 规则参数配置:
    • 名称:web_discovery_rule
    • 代理程序:没有 agent 代理程序
    • IP 范围:192.168.8.105-120(可多个网段,逗号分隔)
    • 更新间隔:1m(实验环境修改为1分钟,默认1小时)
    • 设备唯一性准则:IP 地址
    • 可见名称:IP 地址
      请添加图片描述
  • 检查类型选择:SSH(只要发现的主机有SSH 22端口即可)
    请添加图片描述
  1. 保存并启用该发现规则。

4. Zabbix 服务端创建发现动作(Action)

  1. 路径:告警 --> 动作 --> 发现动作 --> 创建动作

请添加图片描述

  1. 基础配置:
    • 动作名称:web_discovery
    • 状态:已启用

请添加图片描述

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

请添加图片描述

请添加图片描述

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

请添加图片描述

请添加图片描述

添加至 Linux servers 主机群组
请添加图片描述
继续添加动作:
请添加图片描述
为主机关联模板 Linux by Zabbix agent
请添加图片描述

  1. 保存动作配置。

请添加图片描述

5. 验证与被监控端配置修复

5.1 查看主机列表

路径:监测 --> 主机,可看到自动发现的 web2 主机,此时主机状态为不可用

请添加图片描述

5.2 web2 修改 Agent 配置,放行 Zabbix 服务端
# 编辑 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 主机状态变为可用,自动发现功能生效。

请添加图片描述


自动发现配置步骤简略:

  • 创建发现规则
  • 创建发现动作
    • 添加触发条件
    • 添加执行操作

注意修改 Agent 配置,放行 Zabbix 服务端


二、Zabbix 报警机制

1. 报警机制基础说明

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

2. 创建触发器

  1. 数据采集 --> 模板 --> 选择模板 Template_usercount --> 触发器 --> 创建触发器

请添加图片描述
请添加图片描述

  1. 触发器基础配置:

    • 名称:usercount_gt_50
    • 事件名称:usercount_gt_50
    • 严重性:告警

选择告警
请添加图片描述

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

请添加图片描述

请添加图片描述

  • 条件:自定义监控项的结果 大于50
    请添加图片描述

点击插入

  1. 点击添加,启用触发器并保存。请添加图片描述

3. 配置邮件告警媒介

3.1 启用 Email 媒介类型

路径:告警 --> 媒介,找到 Email 类型并启用,

请添加图片描述

配置参数:

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

请添加图片描述
请添加图片描述

这里配置的EmailEmail (HTML)是用来设置网络邮箱地址的

3.2 为管理员用户绑定收件邮箱
  1. 用户 --> 选择 Admin 超级管理员 --> 报警媒介 --> 添加

请添加图片描述
请添加图片描述

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

请添加图片描述
点击添加,点击更新

请添加图片描述

4. 创建触发器告警动作

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

请添加图片描述

请添加图片描述

  1. 动作基础信息:
    • 名称:report_user
    • 状态:已启用

请添加图片描述

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

请添加图片描述

请添加图片描述

请添加图片描述

点击添加

  1. 操作配置:
    • 操作类型:发送消息
    • 接收用户:Admin(Zabbix Administrator)
    • 发送媒介:Email
    • 步骤持续时间:60秒

点击操作,点击添加:
请添加图片描述

请添加图片描述

  1. 保存动作。

5. Zabbix 服务端配置邮件服务

安装并启动 postfix 邮件服务与邮件客户端 mailx

# 安装邮件相关软件包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 批量创建测试用户:

# 批量创建 15 个用户
[root@web1 ~]# for i in {1..15}
> do
>    useradd  user$i
> done
# 查看系统总用户数,确认超过 50
[root@web1 ~]# wc -l  /etc/passwd

监测–>问题–>动作中,可以看到,只要问题没有解决,会一直发送邮件。
请添加图片描述
若邮件发送失败,动作页面也会显示错误和失败原因,方便我们去排错

6.2 查看告警邮件

在 Zabbix 服务端查看邮件:

[root@zabbix-server ~]# mail

可收到主题为 Problem: usercount_gt_50 的告警邮件,输入邮件编号查看内容,按 q 退出。

请添加图片描述

6.3 解除告警(用户数 < 50)

批量删除测试用户,恢复正常状态:

# 批量删除 15 个测试用户
[root@web1 ~]# for i in {1..15}
> do
>    userdel   -r  user$i
> done
# 验证用户总数低于 50
[root@web1 ~]# wc -l  /etc/passwd

回到问题页面,跳动着‘已解决’三个绿色字体

请添加图片描述

服务端会收到故障恢复的通知邮件。

请添加图片描述

给自定义监控项添加报警机制的简略步骤:

  • 创建触发器
    • 添加严重程度,配置条件表达式
  • 配置邮件告警媒介
    • 启用 Email 媒介类型,并进行基础配置(发件人收件人)
    • 为管理员用户绑定收件邮箱
    • Zabbix 服务端配置邮件服务
  • 创建触发告警动作

三、Zabbix 主动监控

1. 主动监控与被动监控区别

两种模式针对被监控端 Agent 划分,Zabbix 默认使用被动监控

  1. 被动监控:Zabbix Server 主动连接 Agent 拉取数据,Agent 监听 10050 端口。
  2. 主动监控:Agent 主动连接 Zabbix Server 上报数据。
    • 区别在于:Server 不需要每次都链接Agent,Agent会自己收集数据并处理,Server仅负责存储数据。大幅减轻了服务端压力。
  3. 适用场景:监控主机数量庞大时,推荐使用主动监控或分布式监控。

2. 配置 web2 为主动监控模式

修改 web2 的 Zabbix Agent 配置文件,关闭被动、开启主动监控:

[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 并验证
# 强制停止原有进程
[root@web2 ~]# killall -9 zabbix_agentd
# 启动 Agent(主动模式无 10050 端口)
[root@web2 ~]# zabbix_agentd
# 仅查看进程,无需查看 10050 端口
[root@web2 ~]# ps aux | grep zabbix_agentd

注意,这一步不要使用ss -ntulp去过滤端口了,主动监控是不经过10050端口的!所以只要ps命令来查看进程

3. Zabbix 服务端配置主动监控主机

  1. 路径:监测 --> 主机 --> 创建主机

请添加图片描述

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

请添加图片描述

  1. 保存后,主机列表中 web2 标记为主动监控模式。

主动模式的Agent不再监听任何端口,本机没有端口等待外部连入

请添加图片描述

4. 验证主动监控数据

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

请添加图片描述


Zabbix 主动监控配置步骤

  • 修改被监控服务器的zabbix_agentd.conf配置文件
    • 重启 Agent
  • Zabbix WEB服务端配置主动监控主机
    • 创建主机,模板选择 Linux by Zabbix agent active
    • 不配置 Agent 接口(主动模式无需端口)

四、监控 Nginx 服务

1. 编译部署 Nginx(开启状态模块)

实验要求 Nginx 启用 stub_status 状态模块,web1 主机操作:

1.1 安装依赖与编译 Nginx

nginx-1.22.1.tar.gz 上传至 web1/root 目录:

# 安装编译依赖
[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 配置,开启状态页面
# 编辑 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 状态页
[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

server accepts handled requests
2 2 2

第一个数字代表accepts,第二个数字代表handled,第三个数字代表requests

(2)状态字段说明
  • Active connections:当前客户端与 Nginx 的总连接数 = Reading + Writing + Waiting
  • accepts:Nginx 启动后累计接收的客户端连接总数
  • handled:Nginx 启动后累计处理的连接总数(通常与 accepts 一致)
  • requests:Nginx 启动后累计处理的请求总数
  • Reading:正在读取客户端请求的连接数
  • Writing:正在向客户端返回响应的连接数
  • Waiting:空闲等待新请求的连接数
(3)压力测试(提升访问量)
# 安装压测工具 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 状态数据:

# 创建脚本文件
[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
#不要照抄脚本,注意其中的配置,如IP地址等,避免低级错误

curl -s:静默请求 URL,-s 表示不输出请求日志、错误信息,只返回页面原始内容

知识回顾:/usr/local/bin/这个路径是全局可执行文件目录,默认就在系统 PATH 环境变量里,存放其中的程序、Shell 脚本,任意用户、任意目录下直接输文件名就能执行,不用写完整路径。

脚本授权与本地测试
# 添加执行权限
[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. 开启被监控端自定义监控功能

在 web1 主机上修改 Agent 配置文件:

[root@web1 ~]# vim /usr/local/etc/zabbix_agentd.conf
345 UnsafeUserParameters=1                          # 是否允许自定义支持key(去掉注释,顶格写,0改为1)
329 Include=/usr/local/etc/zabbix_agentd.conf.d/    # 加载配置文件目录(去掉注释,顶格写),自定义文件(也就是key)的存放目录

切记不能少了这一步,否则无法自定义key

4. 配置 Zabbix Agent 自定义监控项

# 创建 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]

注意,如果你的主机是主动监控模式,这一步会报错,原因是命令会自动走127.0.0.1:10050,但主动模式没有监听的端口,不能用 zabbix_get,会报错。主动监控需要这样来测试:

zabbix_agentd -c /usr/local/etc/zabbix_agentd.conf -t nginx_status[active]

若返回:

nginx_status[active]        [t|1]

则代表正常
t= 文本类型,竖线后面就是采集到的数值,key、UserParameter、脚本全部正常。

5. Zabbix 服务端创建 Nginx 监控模板与监控项

5.1 创建监控模板

路径:数据采集 --> 模板 --> 创建模板

  • 模板名称:Nginx_Monitor
  • 选择模板组,保存模板。

请添加图片描述

请添加图片描述

5.2 在模板内创建监控项

进入 Nginx_Monitor 模板 --> 监控项 --> 创建监控项,按需创建多个监控项:

请添加图片描述

请添加图片描述

  1. 监控项1:
    • 名称:nginx_accepts
    • 类型:Zabbix 客户端
    • 键值:nginx_status[accepts](如果想要监控其他几项数据,则需要在键值这个位置传递不同的参数)
    • 信息类型:数字(无正负)
    • 更新间隔:1m
  2. 监控项2:键值 nginx_status[active](监控活跃连接)
  3. 监控项3:键值 nginx_status[waiting](监控空闲连接)

请添加图片描述

请添加图片描述

请添加图片描述
成功添加三个监控项

请添加图片描述

6. 模板关联主机 & 查看监控数据

6.1 关联模板

路径:数据采集 --> 主机 --> 选择 web1 --> 模板 --> 添加,选中 Nginx_Monitor 模板并保存。

请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述

6.2 查看监控数据

路径:监测 --> 最新数据,筛选主机 web1,查看 Nginx 相关监控指标与趋势图表,数据正常采集即配置完成。

请添加图片描述

请添加图片描述

五、Zabbix 拓扑图

  1. 功能:通过拓扑图直观展示服务器架构、设备状态、链路关系。
  2. 入口:监测 --> 拓扑图,可创建新拓扑图、编辑已有拓扑。

请添加图片描述

  1. 基础操作:
    • 添加拓扑元素(主机、图标);
    • 选中两个设备,点击「链接」添加连线;
    • 支持网格对齐、宏展开、尺寸调整等功能。

请添加图片描述
添加元素:
请添加图片描述
按住ctrl键同时选中两个设备,点击「链接–>添加」添加连线:

请添加图片描述
修改拓扑图的参数:

请添加图片描述

请添加图片描述
请添加图片描述

更多使用细节需要继续探索

六、整体知识点总结

  1. 自动发现:解决大批量主机手动添加问题,流程为「创建发现规则 → 配置发现动作 → 自动加主机+关联模板」。
  2. 报警机制:自定义监控告警依赖 触发器(阈值)+ 动作(执行行为),常用邮件告警,需配置邮件服务、告警媒介、用户收件地址。
  3. 主动/被动监控
    • 被动:Server 主动拉取数据,Agent 监听 10050;
    • 主动:Agent 主动上报数据,减轻服务端压力,适合大规模集群。
  4. Nginx 监控:编译 Nginx 开启 stub_status 状态模块 → 编写采集脚本 → 配置 Agent 自定义监控项 → Zabbix 创建模板/监控项 → 关联主机查看数据。
  5. 拓扑图:可视化展示设备架构与运行状态,便于运维直观管理集群。

踩坑经历:使用kill强行杀死zabbix_agentd进程时可能会因为残留pid导致无法重启服务,此时有两种原因:
1,可能是pid文件残留
需要进入配置文件/usr/local/etc/zabbix_agentd.conf查找PidFile路径,删除/tmp/zabbix_agentd.pid文件即可
2,僵尸进程或残留子进程占用端口
使用:ps -elf | grep zabbix过滤查看是否有僵尸进程或残留子进程,若有,那么就用killall -9 批量强行杀死即

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐