本文是《Zabbix 7.0 安装部署实战系列》的进阶篇。前几篇我们把平台装好、中文化、做了运维告警大屏。这一篇来解决一个更"生产级"的问题:几百台服务器、上千个网口、几百块磁盘,难道要一台台点、一个个加监控项?
答案是:当然不。Zabbix 有两大批量利器——自动发现(Network Discovery) 和 LLD(Low-Level Discovery,低级发现)。一个管"批量把主机请进门",一个管"进门后把每个房间自动看一遍"。说实话,能不能玩转这两样,是 Zabbix 从"玩具"变"生产平台"的分水岭。
先把两个概念掰清楚(很多人都现在都没搞懂)
这两个词经常被混为一谈,但它们解决的是两个完全不同层面的问题。
| 主机从哪来 | 监控项怎么批量建 | |
一句话总结:自动发现负责"把机器请进门",LLD 负责"进门后自动把每个房间都看一遍"。 两者配合,才构成完整的"批量纳管"。
自动发现(Network Discovery)实战
2.1 原理
Zabbix Server 按计划扫描 IP 段
│ 对每个 IP 执行"检查项"(如连 10050 取 system.uname)
▼
命中检查 → 产生 Discovery Event
│
▼
匹配"自动发现动作"(Action)的条件
│
▼
执行操作:加主机 + 链接模板 + 加入主机组
换句话说,你只要告诉 Server"去扫哪段、用什么检查、命中后套什么模板",剩下的全自动。
2.2 我这套平台里,其实已经自带了一套
翻了下我这台 7.0.31 的环境,默认就有现成的配置,正好:

① 发现规则 Local network(druleid=2)
172.16.88.0/23 | |
1h | |
system.uname | |
10050 |
② 动作 Auto discovery. Linux servers.(actionid=2,已启用)
条件: 收到值(A)AND主机元数据含 "Linux"(B)AND检查类型=Zabbix agent(C)操作:链接模板 10001(Linux by Zabbix agent)+ 加入主机组2(Linux servers)
你看,官方默认动作已经把"加主机→套模板→分组"这条链路搭好了。你只需要在前端数据采集 → 自动发现里按自己的网段改一下 IP 范围,就能直接用。
2.3 自己从零配一条
如果你要新建,字段如下(事件源必须选"自动发现"):
发现规则:名称自定义;IP 范围填你的网段(如 10.0.0.0/24);检查项加一条"Zabbix 客户端",键值system.uname,端口10050。动作(事件源=自动发现): • 条件建议加严:除了"收到值",再加一条 主机元数据 包含 Linux,避免把打印机、路由器也收进来。• 操作加三项:添加主机(operationtype=2)→ 链接模板(如 Linux by Zabbix agent)→ 加入主机组。
⚠️ 我的经验:IP 范围别一上来就写
/16、delay 别设成1m。Server 会真的去扫每一个 IP,范围太大或太频繁会把自己 CPU 打爆。先用一个/24试点,观察zabbix_server负载再扩。
LLD(低级发现)实战
3.1 原理
LLD 的核心是:一个 discovery key 返回一个 JSON 数组,Zabbix 用数组里的宏(如 {#FSNAME})去实例化一批"原型"。
discovery key 返回:
[{"{#FSNAME}":"/","{#FSTYPE}":"ext4"},
{"{#FSNAME}":"/home","{#FSTYPE}":"ext4"}]
│ 提取宏 {#FSNAME}
▼
自动生成(每个挂载点一份):
监控项原型 → Free disk space on {#FSNAME}
触发器原型 → {#FSNAME} is full (>80%)
图形原型 → Disk usage {#FSNAME}
这就是为什么你套上 Linux by Zabbix agent 模板后,不用配任何磁盘监控项,所有挂载点的空间告警就自动来了。
3.2 内置 LLD(真实清单,来自模板 10001)
我直接查了 Linux by Zabbix agent 模板里的发现项,至少有这三个开箱即用的:
vfs.fs.dependent.discovery | ||
net.if.discovery | ||
vfs.dev.discovery |
也就是说,一台新机器只要被自动发现纳管并套了这个模板,它的网卡、磁盘、块设备监控会瞬间自动铺满。这就是"批量纳管"的威力。
3.3 自定义 LLD(进阶,业务系统常用)
内置的不够用时,自己写一个 discovery 脚本即可。比如自动发现 Nginx 的虚拟主机:
#!/bin/bash
# /etc/zabbix/scripts/nginx_vhosts.sh —— 返回 JSON 数组
vhosts=$(nginx -T 2>/dev/null | grep -oP 'server_name\s+\K[^\s;]+' | sort -u)
echo'{"data":['
first=1
for v in$vhosts; do
[ $first -eq 0 ] && echo','
printf'{"{#VHOST}":"%s"}'"$v"
first=0
done
echo']}'
然后在 Agent 配置里暴露它:
# /etc/zabbix/zabbix_agent2.conf 或 zabbix_agentd.conf
UserParameter=nginx.vhost.discovery,/etc/zabbix/scripts/nginx_vhosts.sh
前端在模板里建一条发现规则,类型选"Zabbix 客户端",键值 nginx.vhost.discovery,再建监控项原型用 {#VHOST} 宏,完事。
⚠️ 两个常见坑:① JSON 数组里每一项至少要含一个宏,且宏名必须和原型里
{#XXX}完全一致、大小写敏感;② 返回的必须是合法 JSON,别带多余 echo 日志,否则 Zabbix 解析失败整个 LLD 罢工。
3.4 用过滤器收敛噪声
docker 环境下一台机器可能扫出几十个 docker0、vethxxx 网卡,全监控纯属浪费。用 LLD 的 过滤器(Filter) 按宏排除即可,例如正则 ^docker|^veth|^lo$ 直接忽略。
两者怎么配合:完整的"批量纳管"闭环
这是最关键的一张图,也是整套机制的价值所在:
新 Linux 机器上电
│
▼
① 自动发现扫描命中 → Action 把它加为"主机"并套 Linux by Zabbix agent 模板
│
▼
② 模板里的 LLD 立即工作:自动发现这台机器的所有网卡 / 挂载点 / 块设备
│
▼
③ 监控项原型 + 触发器原型被实例化 → 磁盘满了会告警、网卡掉了会告警
│
▼
零手工,一台生产机的完整监控就绪 ✅
你看,"加主机"和"加监控项"这两件最累的活,被一条自动发现规则 + 一个带 LLD 的模板一次性包圆了。200 台机器?把 IP 范围写对,喝杯咖啡回来就齐了。
避坑指南
扫描范围过大 / 间隔过短 → Server 性能雪崩。 /24起步,delay别低于30m(首次发现可临时调快,平时调回)。动作条件太宽 → 把同事电脑、打印机、路由器全纳管了。务必加 主机元数据 包含 Linux或限定检查类型。LLD 宏名大小写不一致 → {#Fsname}和{#FSNAME}不是一回事,原型不生效还不报错,排查半天。自定义脚本带多余输出 → LLD 只认纯 JSON,脚本里 echo "debug..."会直接让 discovery 失效。噪声太多 → docker / 虚拟网卡 / loopback 用过滤器排除,否则监控项爆炸、采集变慢。 自动发现加的主机默认只采集 Agent 数据 → 想要端口、Web、证书等深度监控,还是得靠模板里的 LLD + 普通监控项组合,或像前面 OA/官网那样单独配。
本文链接:https://www.kinber.cn/post/6823.html 转载需授权!
推荐本站淘宝优惠价购买喜欢的宝贝:

支付宝微信扫一扫,打赏作者吧~
