【免费下载链接】community-templates
Zabbix Community Templates repository
本篇文章以 Zabbix Community Templates 仓库(community-templates)中收录的 Quagga BGP 模板 为对象,完整讲解如何通过 Zabbix Agent 的自动发现(LLD)机制动态发现 Quagga 路由器上的 BGP 邻居(Peer),并为每个邻居建立会话状态监控项与告警触发器。读完本文,你将掌握该模板的发现规则、监控项原型、触发器设计、三种 Zabbix 版本(5.0/5.4/6.0)下的导入文件差异,以及模板落地到实际 Quagga 环境所需的关键前置条件。
模板概览:监控 Quagga BGP 对等体的自动发现方案
Quagga 是一套经典的开源路由协议套件,其中bgpd守护进程负责 BGP 路由协议的运行。在实际网络运维中,一个 Quagga 路由器往往与多个自治系统(AS)建立 BGP 对等关系,如果逐一为每个 Peer 手工创建监控项,既繁琐又难以应对拓扑变化。本模板解决的正是这一痛点:通过 Zabbix 的 LLD(Low Level Discovery,低级自动发现)机制,自动枚举 Quagga 上所有 BGP 邻居,并为每个邻居动态生成监控项和触发器。
模板作者为 Renan Rodrigues,官方描述为“Template for auto-discovery bgp peers and monitor they”(自动发现 BGP 对等体并监控它们),适用于通过 Zabbix Agent 采集数据的监控场景。模板本身不包含任何宏定义,也没有链接其他模板,是一个完全自包含的轻量级模板。
在仓库中,该模板按 Zabbix 大版本号分目录存放:
| 目录 | 导入文件格式 | 对应 Zabbix 版本 |
|---|---|---|
| Network_Appliances/template_quagga_bgp_sessions_monitor/5.0 | XML(template_quagga_bgp_sessions_monitor.xml) | Zabbix 5.0 |
| Network_Appliances/template_quagga_bgp_sessions_monitor/5.4 | YAML(template_quagga_bgp_sessions_monitor.yaml) | Zabbix 5.4 |
| Network_Appliances/template_quagga_bgp_sessions_monitor/6.0 | YAML(template_quagga_bgp_sessions_monitor.yaml) | Zabbix 6.0 |
三个版本的监控逻辑完全一致,差异仅体现在导出格式(5.0 为 XML,5.4 及以后为 YAML)和触发器表达式的语法上(详见下文“版本差异”一节)。仓库根目录的 README.md 的索引中也将该模板收录在 Network_Appliances 分类下,方便用户检索。
模板的组成结构
从 5.0 的 XML 导出文件 中可以清晰看到模板的完整定义:
- 模板组(groups):
Quagga BGP,模板与所属组同名; - 应用(applications):
BGP,所有监控项归属该应用,便于在“监控项”页按应用分组浏览; - 发现规则(discovery_rules):1 条;
- 监控项原型(item_prototypes):1 个(挂载在发现规则下);
- 触发器原型(trigger_prototypes):1 个(挂载在监控项原型下)。
在 5.4/6.0 的 YAML 导出文件 中,模板还带有tags(标签)定义:监控项原型带有Application: BGP标签,这是 5.4+ 版本相比 5.0 在元数据组织上的一个增量——Zabbix 5.4 之后引入了“标签”体系,可用于过滤、分组与告警路由。YAML 文件同时为模板、发现规则、监控项原型、触发器原型各自生成了uuid字段(如模板级baf99583c9b14e41ab4d438a4b5b0a6f),便于跨环境同步与模板去重。
自动发现规则:bgpdiscovery
模板的核心是一条名为BGP discovery的自动发现规则,关键参数如下:
| 参数 | 值 | 说明 |
|---|---|---|
| 名称 | BGP discovery | 在 Zabbix 前端展示的发现规则名称 |
| 类型 | Zabbix agent | 由被监控主机上的 Zabbix Agent 返回数据 |
| 键值(Key) | bgpdiscovery | 发现规则使用的 item key |
| 更新间隔(delay) | 3600 秒 | 每小时执行一次发现,输出当前全部 BGP 邻居列表 |
| 生命周期(lifetime) | 1d | 未再被发现的 Peer 相关监控项在 1 天后被清理 |
该发现规则返回的数据中,每个 BGP 邻居会携带宏{#BGPPEER}——它代表一个 BGP 对等体的标识(典型实现中可解析为对端 IP 地址),后续监控项原型和触发器原型都依赖这个宏实现“每个 Peer 一套监控项”的模板化生成。
需要特别说明的是:发现规则的键值bgpdiscovery并非 Zabbix 内置键,而是依赖用户在 Agent 侧自定义的 UserParameter 实现。从仓库内容看,模板目录下只提供了模板导出文件,并未附带 Agent 端脚本(如解析show ip bgp summary输出的 shell 脚本),因此这是部署时必须自行补齐的一环。常见做法是在 Quagga 主机上通过vtysh -c "show ip bgp summary"等命令抓取邻居列表,将 JSON 化的{#BGPPEER}宏列表输出给 Zabbix 解析。这一部分是模板能否实际工作的关键前置条件,将在下文“落地前置条件”小节进一步说明。
监控项原型:Peer {#BGPPEER}
发现规则下挂载了一个监控项原型Peer {#BGPPEER},其参数为:
| 参数 | 值 | 说明 |
|---|---|---|
| 名称 | Peer {#BGPPEER} | 每个发现的邻居会生成同名监控项,宏被替换为实际 Peer 标识 |
| 键值 | bgpmon[{#BGPPEER}] | 带参数的 item key,参数为 Peer 标识 |
| 类型 | Zabbix agent | 数据由 Agent 采集 |
| 更新间隔 | 60 秒 | 每分钟检查一次会话状态 |
| 单位(units) | state | 以“状态”为单位展示 |
| 归属 | 应用BGP(5.4/6.0 另带标签Application: BGP) | 用于前端分组 |
该监控项返回的数值语义为0 或非 0 的状态值:结合触发器的判断逻辑可以确认,0 表示 BGP 会话处于 down(断开)状态,非 0 表示会话存活。监控项原型上标记了LLD,表明它是由上述发现规则动态实例化生成的,而非手工创建的静态监控项。
由于键值bgpmon[{#BGPPEER}]同样是自定义键,Agent 端需要实现对应的 UserParameter(例如通过vtysh查询指定邻居的会话状态,可用show ip bgp neighbor <peer>输出或show ip bgp summary的状态字段判断 Established 与否,转换为 1/0 返回)。这同样属于部署时需自行提供的部分,仓库模板本身只负责 Zabbix 侧的采集定义。
触发器原型:会话断开告警
监控项原型下挂载了一个触发器原型,用于在 Peer 会话断开时产生告警:
| 参数 | 值 |
|---|---|
| 名称 | BGP session with {#BGPPEER} is down |
| 描述 | Bgp session is down |
| 优先级 | warning(警告) |
| 表达式(5.0) | {Quagga BGP:bgpmon[{#BGPPEER}].last()}=0 |
| 表达式(5.4/6.0) | last(/Quagga BGP/bgpmon[{#BGPPEER}])=0 |
表达式的逻辑非常直白:当对应 Peer 的监控项最新值为 0 时触发告警,即会话 down。注意模板未配置恢复表达式(Recovery expression 为空),告警的恢复将依赖 Zabbix 对触发器“问题”状态的自动清除机制(当表达式条件不再成立、即值恢复为非 0 时自动关闭)。
另外,在 5.0 的 README 触发器表格中,该触发器出现了两条记录(一条普通触发器、一条标注 LLD 的触发器),这实际是同一触发器原型在不同文档段落中的重复列举;从 XML 导出文件看,模板内只定义了一个触发器原型,不会造成重复告警。
版本差异:表达式语法与导出格式
该模板在 5.0、5.4、6.0 三个版本中的功能完全等价,但存在两处值得注意的差异:
- 触发器表达式语法:5.0(XML)使用旧式表达式
{Quagga BGP:bgpmon[{#BGPPEER}].last()}=0,其中{<模板名>:<键值>.<函数>()}是 Zabbix 4.4 及之前风格;5.4/6.0(YAML)则使用 Zabbix 5.4 引入的新函数式语法last(/Quagga BGP/bgpmon[{#BGPPEER}])=0,路径以/开头。在导入模板时务必选择与目标 Zabbix 版本匹配的文件,否则可能因表达式语法不被解析而报错。 - 导出格式与元数据:5.0 使用 XML 格式(template_quagga_bgp_sessions_monitor.xml),5.4/6.0 使用 YAML 格式,且 YAML 版本为模板、发现规则、监控项原型、触发器原型都生成了
uuid,并增加了tags标签定义。
部署与使用步骤
参照仓库根目录 README.md 给出的模板使用通用流程,结合本模板特性,完整落地步骤如下:
- 准备 Agent 端采集能力:在运行 Quagga(
bgpd)的 Linux 主机上安装 Zabbix Agent,并在 Agent 配置(如zabbix_agentd.conf或*.conf的 UserParameter 段落)中定义两个自定义键:bgpdiscovery:输出 BGP 邻居列表(JSON 格式,包含{#BGPPEER}宏);bgpmon[{#BGPPEER}]:返回指定 Peer 的会话状态(1 存活 / 0 断开)。 典型实现思路是封装vtysh命令解析show ip bgp summary的输出,并确保 Agent 运行用户具备执行vtysh的权限。由于仓库未提供现成脚本,这一步需要根据自身 Quagga 环境自行编写(可参考仓库中同类 BGP 模板的采集思路,如 Mikrotik - BGP LLD 使用 SSH 采集、Cisco BGP SNMP 走 SNMP,而本模板走的是 Zabbix Agent 通道)。
- 导入模板:登录 Zabbix Web 前端,进入“配置 → 模板 → 导入”,按目标版本选择 5.0 XML、5.4 YAML 或 6.0 YAML 文件,导入成功后会生成名为Quagga BGP的模板。
- 关联主机:将目标 Quagga 主机(需已配置指向其 Agent 的接口)链接该模板。
- 验证发现结果:等待发现规则按 3600 秒间隔执行一次(或手动执行“立即刷新”),随后在“监控项”中应能看到每个 Peer 自动生成的
Peer {#BGPPEER}监控项,在“触发器”中看到对应的会话断开告警。 - 按需调整轮询频率:发现间隔默认 3600 秒、状态检查间隔默认 60 秒,若网络规模或实时性要求不同,可在前端直接调整这些参数。
使用要点与限制
- 模板不含宏:README 明确说明 “There are no macros links in this template”,即没有可配置的宏,如需调整监控频率,直接改发现规则/监控项原型的更新间隔即可。
- 无模板链接:同样地,模板不依赖任何其他模板(“There are no template links in this template”),导入后开箱即用,无需额外挂载依赖。
- 自定义键是运行前提:
bgpdiscovery与bgpmon[...]均非内置键,必须由 Agent 端 UserParameter 提供实现;这是该模板与“纯内置键模板”最大的不同,也是排障时优先检查的点(zabbix_get/zabbix_sender手动测试键值是否返回预期 JSON 与 0/1 数值)。 - 告警语义单一:触发器仅判断“会话 down”(值为 0),未包含前缀数量、路由抖动(flap)等更细粒度的监控;如需扩展,可在现有监控项原型基础上补充预处理或新增触发器原型。
小结
Quagga BGP 模板是一个“小而精”的 LLD 实战范例:用一条 3600 秒的发现规则枚举邻居,用一条 60 秒的带参监控项bgpmon[{#BGPPEER}]检查每个 Peer 的状态,再用一条 warning 级触发器在会话断开时告警——三个对象构成完整闭环,充分体现了 Zabbix 自动发现机制在“动态拓扑监控”场景下的典型用法。它在仓库中同时提供了 5.0/5.4/6.0 三种版本的导入文件,覆盖了多数存量与较新版本的 Zabbix 环境。部署时只需牢记一点:模板负责定义“监控什么、怎么告警”,而 Agent 端的bgpdiscovery/bgpmon[]采集脚本需要结合自身 Quagga 环境自行补齐,二者配合才能让这套 BGP 会话监控真正跑起来。
【免费下载链接】community-templates
Zabbix Community Templates repository
相关推荐
Zabbix community-templates 之 1C Enterprise 模板:用 LLD 自动发现信息库并按类型拆解会话监控
Zabbix community templates 之 1C Enterprise 模板:用 LLD 自动发现信息库并按类型拆解会话监控 在 communit
基于 Zabbix LLD 自动发现监控 Graylog 集群节点:community-templates 中 graylog_nodes 模板实战解析
基于 Zabbix LLD 自动发现监控 Graylog 集群节点:community templates 中 graylog_nodes 模板实战解析 本篇技
Zabbix 监控 GlusterFS 集群:community-templates 中 Gluster Storage 模板的 LLD 卷发现与容量监控实践
Zabbix 监控 GlusterFS 集群:community templates 中 Gluster Storage 模板的 LLD 卷发现与容量监控实践
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考