HQY

×

Zabbix 7自动发现与 LLD 批量纳管配置指导

hqy hqy 发表于2026-10-23 16:25:11 浏览5 评论0

抢沙发发表评论

本文是《Zabbix 7.0 安装部署实战系列》的进阶篇。前几篇我们把平台装好、中文化、做了运维告警大屏。这一篇来解决一个更"生产级"的问题:几百台服务器、上千个网口、几百块磁盘,难道要一台台点、一个个加监控项?

答案是:当然不。Zabbix 有两大批量利器——自动发现(Network Discovery) 和 LLD(Low-Level Discovery,低级发现)。一个管"批量把主机请进门",一个管"进门后把每个房间自动看一遍"。说实话,能不能玩转这两样,是 Zabbix 从"玩具"变"生产平台"的分水岭。


先把两个概念掰清楚(很多人都现在都没搞懂)

这两个词经常被混为一谈,但它们解决的是两个完全不同层面的问题。

维度
自动发现 Network Discovery
LLD 低级发现 Low-Level Discovery
解决什么
主机从哪来
(批量加主机)
监控项怎么批量建
(批量加 Item/Trigger/Graph)
触发时机
Server 主动扫描网络
已纳管主机上定时执行 discovery key
典型场景
一个网段里 200 台 Linux 自动入网
一台机器上有 20 个挂载点、8 块网卡自动监控
配置位置
数据采集 → 自动发现
模板里的"发现规则"(Discovery)
输入
IP 段 + 检查项(Agent/ICMP/SNMP)
一个返回 JSON 的 discovery key

一句话总结:自动发现负责"把机器请进门",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)

字段
值
名称
Local network
IP 范围
172.16.88.0/23
更新间隔(delay)
1h
检查项类型
Zabbix 客户端(type=9)
键值
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 自己从零配一条

如果你要新建,字段如下(事件源必须选"自动发现"):

  1. 发现规则:名称自定义;IP 范围填你的网段(如 10.0.0.0/24);检查项加一条"Zabbix 客户端",键值 system.uname,端口 10050。
  2. 动作(事件源=自动发现):
    • 条件建议加严:除了"收到值",再加一条 主机元数据 包含 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 模板里的发现项,至少有这三个开箱即用的:

discovery key
名称
用途
vfs.fs.dependent.discovery
Mounted filesystem discovery
自动发现所有挂载点
net.if.discovery
Network interface discovery
自动发现所有网卡
vfs.dev.discovery
Block devices 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 范围写对,喝杯咖啡回来就齐了。


避坑指南

  1. 扫描范围过大 / 间隔过短 → Server 性能雪崩。/24 起步,delay 别低于 30m(首次发现可临时调快,平时调回)。
  2. 动作条件太宽 → 把同事电脑、打印机、路由器全纳管了。务必加 主机元数据 包含 Linux 或限定检查类型。
  3. LLD 宏名大小写不一致 → {#Fsname} 和 {#FSNAME} 不是一回事,原型不生效还不报错,排查半天。
  4. 自定义脚本带多余输出 → LLD 只认纯 JSON,脚本里 echo "debug..." 会直接让 discovery 失效。
  5. 噪声太多 → docker / 虚拟网卡 / loopback 用过滤器排除,否则监控项爆炸、采集变慢。
  6. 自动发现加的主机默认只采集 Agent 数据 → 想要端口、Web、证书等深度监控,还是得靠模板里的 LLD + 普通监控项组合,或像前面 OA/官网那样单独配。


打赏

本文链接:https://www.kinber.cn/post/6823.html 转载需授权!

分享到:


推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

 您阅读本篇文章共花了: 

群贤毕至

访客