【免费下载链接】community-templates
Zabbix Community Templates repository
导读
本文围绕 Zabbix Community Templates 仓库中的App Logstash模板(6.0 版本文档)展开,剖析一种不依赖 JMX、不依赖 SNMP 的 Logstash 监控方案:由 Python protobix 库编写的配套脚本读取 Logstash 节点统计 JSON,再通过 Zabbix trapper(Sender)协议将 40 余项 JVM、GC、Pipeline、进程级指标推送到 Zabbix Server。读完本文,你将掌握该模板的完整监控项清单、发现规则、触发器逻辑、宏的作用,以及它背后的"脚本采集 + Trapper 上报 + Agent 哨兵"三层数据流设计,可直接在 Zabbix 6.0 环境中部署落地。
一、模板定位与整体方案
App Logstash是 Zabbix 社区为Logstash(ELK 中的 L)提供的应用级监控模板,作者为 fredprod。模板的核心思路写在 6.0 版 README 的 Overview 中:
This method uses python protobix library, and check metrics from logstash JSON file.
即:使用 Python protobix 库,从 Logstash 的 JSON 统计数据中提取指标。也就是说,监控数据的生产方不是 Zabbix 本身,而是一个独立配套脚本——脚本在 Logstash 节点上读取其节点统计接口输出的 JSON,解析出 JVM 内存、GC、线程、Pipeline 事件、进程 CPU、文件描述符等指标,然后借助 protobix 库按 Zabbix trapper 协议推送给 Server。
这种方案的典型优势在于:Logstash 本身是 JVM 应用,若用 JMX 监控需要额外开启 JMX 端点并维护 keytool 信任链;而本模板只需脚本能访问 Logstash 的统计 JSON,监控链路轻量、无侵入。模板本体(template_logstash.yaml)只负责在 Zabbix 侧定义"接收指标的桶"(items)、"节点发现的入口"(discovery rule)和"告警规则"(triggers)。
仓库中的版本分布
当前仓库中该模板按 Zabbix 主版本维护了三个版本目录:
| 目录 | 面向 Zabbix 版本 | 模板文件格式 |
|---|---|---|
| Applications/template_logstash/5.0 | 5.0 | XML(template_logstash.xml) |
| Applications/template_logstash/5.4 | 5.4 | YAML(template_logstash.yaml) |
| Applications/template_logstash/6.0 | 6.0 | YAML(template_logstash.yaml) |
三个版本的 README 内容一致,模板结构(宏、发现规则、监控项、触发器)也基本保持同步;6.0 的 YAML 导出时间为 2021-11-21,zabbix_export.version: '6.0',可直接导入 Zabbix 6.0 及以上版本。5.0 的 XML 版本额外保留了applications分组(Logstash、Logstash Memory、Logstash Node JVM、Logstash Pipeline Events、Logstash Process CPU、Logstash Process File Descriptors),而 6.0 YAML 采用tags替代了 applications 分组,这是 Zabbix 5.4+ 对旧分组机制的演进。
二、模板宏:{$ZBX_TPL_VERSION}
README 中明确列出的宏只有一个:
| 宏名称 | 描述 | 默认值 | 类型 |
|---|---|---|---|
{$ZBX_TPL_VERSION} | 模板/脚本版本标识 | 0.0.1 | Text macro(文本宏) |
在 6.0 YAML 的macros段中对应定义:
macros: - macro: '{$ZBX_TPL_VERSION}' value: 0.0.1这个宏不是用来计算数值的,而是模板版本与脚本版本的"握手令牌"。配套脚本会把自身版本通过logstash.zbx_version这个 trapper 项上报给 Server,模板中的触发器Logstash Template and Script version mismatched会用find()函数在logstash.zbx_version的取值中正则匹配0.0.1:如果脚本版本与宏不一致,说明脚本或模板有一方已更新而另一方未同步,触发 INFO 级提示。这保证了"模板升级后脚本也得跟着升级"的运维一致性。
三、发现规则:Logstash discovery
模板只定义了一条发现规则,负责把 Logstash 节点纳入监控:
| 名称 | 类型 | Key | 更新周期 |
|---|---|---|---|
| Logstash discovery | Zabbix trapper | logstash.node.discovery | 0(不轮询,由脚本推送) |
YAML 中的完整定义:
discovery_rules: - uuid: 02bcf2252dc6437ba7e10e0a213bb6a7 name: 'Logstash discovery' type: TRAP key: logstash.node.discovery delay: '0' filter: conditions: - macro: '{#NODENAME}' value: '.*' formulaid: A lifetime: 3d解读其工作机制:
- 类型为 Trapper:Zabbix Server 不会主动轮询该 key,而是等待脚本通过 trapper 协议推送发现数据(JSON),数据中应包含宏
{#NODENAME}(节点名),由此生成"被监控节点"的 LLD 条目。 - 过滤条件
{#NODENAME}匹配.*:接受所有上报的节点名,不做白名单过滤。 - lifetime 为 3d:若某个节点超过 3 天没有向
logstash.node.discovery推送数据,Server 会将其自动清理出监控列表——这天然覆盖了"节点下线/脚本停止"的场景。
另外还有一条名为Logstash discovery的Zabbix agent (active)监控项(key 同样是logstash.discovery,更新周期 1h),注意与上面的发现规则区分:这条 item 由 agent 主动采集,用于周期性报告脚本的发现执行状态。
四、监控项全解析(44 项)
模板定义了 44 个监控项(README 的 Items collected 表),绝大部分(42 项)是Zabbix trapper类型,由脚本推送;另有 2 项由Zabbix agent (active)采集。按功能可分为以下类别。
4.1 健康检查与版本哨兵(agent active / 文本)
| 名称 | Key | 类型 | 更新 | 备注 |
|---|---|---|---|---|
| Logstash check | logstash.check | Zabbix agent (active) | 1m | 脚本运行状态,0 为正常 |
| Logstash discovery | logstash.discovery | Zabbix agent (active) | 1h | 发现任务执行状态 |
| Logstash zabbix script version | logstash.zbx_version | Zabbix trapper | — | TEXT 类型,history 15d,trends 关闭 |
logstash.zbx_version在 YAML 中的定义比较特殊:value_type: TEXT、trends: '0'(不做趋势存储),因为它只是版本字符串,用于与{$ZBX_TPL_VERSION}宏比对,无需保留历史趋势。
4.2 JVM 内存(Heap / Non-Heap)
所有内存指标单位均为B(字节),value_type 为 FLOAT,history 30d:
| 名称 | Key |
|---|---|
| Logstash JVM Mem heap committed | logstash.jvm.mem.heap_committed_in_bytes |
| Logstash JVM Mem heap max | logstash.jvm.mem.heap_max_in_bytes |
| Logstash JVM Mem heap used | logstash.jvm.mem.heap_used_in_bytes |
| Logstash JVM Percent Mem heap used | logstash.jvm.mem.heap_used_percent(单位%) |
| Logstash JVM Mem non heap committed | logstash.jvm.mem.non_heap_committed_in_bytes |
| Logstash JVM Mem non heap used | logstash.jvm.mem.non_heap_used_in_bytes |
heap_used_percent是模板中唯一带双级告警的指标(详见触发器章节),也是日常看板最常用的"JVM 健康度"指标。
4.3 JVM 内存池(Pools:young / survivor / old)
三类内存池各自有 5 个维度(committed、max、used、peak_max、peak_used),共 15 项,单位均为B:
Young 代:
logstash.jvm.mem.pools.young.committed_in_byteslogstash.jvm.mem.pools.young.max_in_byteslogstash.jvm.mem.pools.young.used_in_byteslogstash.jvm.mem.pools.young.peak_max_in_byteslogstash.jvm.mem.pools.young.peak_used_in_bytes
Survivor 区:
logstash.jvm.mem.pools.survivor.committed_in_byteslogstash.jvm.mem.pools.survivor.max_in_byteslogstash.jvm.mem.pools.survivor.used_in_byteslogstash.jvm.mem.pools.survivor.peak_max_in_byteslogstash.jvm.mem.pools.survivor.peak_used_in_bytes
Old 代:
logstash.jvm.mem.pools.old.committed_in_byteslogstash.jvm.mem.pools.old.max_in_byteslogstash.jvm.mem.pools.old.used_in_byteslogstash.jvm.mem.pools.old.peak_max_in_byteslogstash.jvm.mem.pools.old.peak_used_in_bytes
peak_*系列反映的是历史峰值(自 JVM 启动以来的最高水位),对判断内存池是否曾接近上限、是否需要调大堆很有价值。
4.4 JVM GC 收集器
| 名称 | Key | 单位 |
|---|---|---|
| Logstash JVM gc collectors old collection count | logstash.jvm.gc.collectors.old.collection_count | — |
| Logstash JVM gc collectors old collection time | logstash.jvm.gc.collectors.old.collection_time_in_millis | ms |
| Logstash JVM gc collectors young collection count | logstash.jvm.gc.collectors.young.collection_count | — |
| Logstash JVM gc collectors young collection time | logstash.jvm.gc.collectors.young.collection_time_in_millis | ms |
young 与 old 两个收集器的次数/耗时分开统计,配合前面的内存池指标,可以完整评估 GC 频率与停顿对 Logstash 吞吐的影响。
4.5 JVM 线程与运行时间
| 名称 | Key | 单位 |
|---|---|---|
| Logstash JVM Threads count | logstash.jvm.threads.count | — |
| Logstash JVM Threads peak count | logstash.jvm.threads.peak_count | — |
| Logstash JVM uptime | logstash.jvm.uptime_in_millis | ms |
uptime_in_millis可辅助判断节点是否发生过重启——重启后该值会归零重新累计,配合 heartbeat 触发器可还原故障时间线。
4.6 Pipeline 事件统计
| 名称 | Key | 单位 |
|---|---|---|
| Logstash Pipeline Events duration | logstash.pipeline.events.duration_in_millis | ms |
| Logstash Pipeline Events filtered | logstash.pipeline.events.filtered | — |
| Logstash Pipeline Events in | logstash.pipeline.events.in | — |
| Logstash Pipeline Events out | logstash.pipeline.events.out | — |
in / filtered / out是 Logstash 管道最核心的三组计数:进入管道的事件数、经 filter 处理后的事件数、成功输出的事件数。duration_in_millis则是事件在管道中停留的总耗时(毫秒),可用于评估 filter 链的处理效率。
4.7 进程 CPU 与负载
| 名称 | Key | 单位 |
|---|---|---|
| Logstash Process CPU load 1 | logstash.process.cpu.load_average.1m | — |
| Logstash Process CPU load 5 | logstash.process.cpu.load_average.5m | — |
| Logstash Process CPU load 15 | logstash.process.cpu.load_average.15m | — |
| Logstash Process CPU | logstash.process.cpu.percent | % |
| Logstash Process CPU Total in ms | logstash.process.cpu.total_in_millis | ms |
三个 load average 分别对应 1/5/15 分钟的系统负载,percent是 CPU 使用百分比,total_in_millis是进程累计 CPU 时间。
4.8 文件描述符与虚拟内存
| 名称 | Key | 单位 |
|---|---|---|
| Logstash Process Max File descriptors | logstash.process.max_file_descriptors | — |
| Logstash Process Open File descriptors | logstash.process.open_file_descriptors | — |
| Logstash Process Peak File descriptors | logstash.process.peak_open_file_descriptors | — |
| Logstash Mem Total Virtual | logstash.process.mem.total_virtual_in_bytes | B |
文件描述符三项(上限/当前打开/历史峰值)对排查 "Too many open files" 类故障至关重要;total_virtual_in_bytes表示进程占用的虚拟内存总量。
4.9 监控项的通用属性
从 6.0 YAML 可以看到,所有 trapper 项都遵循同样的定义模式:
- uuid: f0ee1d0ded7f46f5bd4f17a40138d2f1 name: 'Logstash JVM Mem heap committed' type: TRAP key: logstash.jvm.mem.heap_committed_in_bytes delay: '0' history: 30d value_type: FLOAT units: B tags: - tag: Application value: 'Logstash Node JVM'几个关键点:
type: TRAP+delay: '0':trapper 项不轮询,delay 恒为 0,数据到达时间完全由脚本推送频率决定。history: 30d:JVM/Pipeline 类指标保留 30 天历史;而logstash.check、logstash.discovery、logstash.zbx_version以及三个 load average 项为15d,在 YAML 中可逐一核对。tags取代 applications:6.0 版本用Application: Logstash Node JVM、Application: Logstash Pipeline Events、Application: Logstash Process CPU、Application: Logstash Process File Descriptors、Application: Logstash Memory、Application: Logstash等标签对监控项分类,这也是 5.0 XML 中applications分组的等价物。- value_type 与 units:绝大多数为 FLOAT,内存类
B、时间类ms、百分比%,版本项为 TEXT。
五、触发器详解(README 与模板文件的差异说明)
这里有一个值得注意的细节:README 的 Triggers 章节写的是 "There are no triggers in this template."(模板中没有触发器),但实际模板文件里定义了 6 条触发器。以 6.0 YAML 和 5.0 XML 为准,实际触发器如下:
| 触发器名称 | 表达式 | 优先级 | 含义 |
|---|---|---|---|
| Logstash check failed | min(/App Logstash/logstash.check,3m)>0 | AVERAGE | 3 分钟内 check 值最小值 >0,即脚本检查失败 |
| Logstash discovery failed | last(/App Logstash/logstash.discovery)>0 | WARNING | 最近一次发现结果 >0,即发现任务异常 |
| Logstash JVM Heap used percent is high | avg(/App Logstash/logstash.jvm.mem.heap_used_percent,30m)>75 | AVERAGE | 30 分钟堆使用率均值 >75% |
| Logstash JVM Heap used percent is TOO HIGH | avg(/App Logstash/logstash.jvm.mem.heap_used_percent,30m)>85 | HIGH | 30 分钟堆使用率均值 >85% |
| Logstash heartbeat | nodata(/App Logstash/logstash.zbx_version,10m)=1 | WARNING | 版本数据 10 分钟无更新,判定脚本/节点失联 |
| Logstash Template and Script version mismatched | find(/App Logstash/logstash.zbx_version,,"regexp","0.0.1")=0 | INFO | 脚本版本与模板宏版本不一致 |
值得展开的两个设计:
双级堆告警(依赖关系):
is high(>75%)与is TOO HIGH(>85%)都基于heap_used_percent的 30 分钟均值。YAML 中is high通过dependencies声明依赖is TOO HIGH,从而形成"先 AVERAGE 后 HIGH"的分级告警阶梯:堆水位 >75% 持续 30 分钟先报 AVERAGE,若继续恶化到 >85% 再升级 HIGH,避免抖动导致告警风暴。YAML 中触发器描述还指出,is high的描述为 "JVM heap used percent average is above 75% for 30m.",is TOO HIGH为 "JVM heap used percent average is above 90% during 30m."(注意描述中的 90% 与表达式 85 存在轻微出入,以表达式为准)。心跳与版本一致性:
Logstash heartbeat依赖logstash.zbx_version的 10 分钟无数据(nodata),并带恢复表达式nodata(...,1m)<>1(数据恢复后 1 分钟内解除);Logstash Template and Script version mismatched用find()正则检查上报版本是否含0.0.1,与{$ZBX_TPL_VERSION}宏呼应。这两条触发器共同保证"脚本活着、且版本与模板匹配"。
六、数据流与工作机制:三层配合
综合 README 与模板定义,整套方案的数据流可以归纳为三层:
- 采集层(脚本 + protobix):配套 Python 脚本在 Logstash 节点上运行,读取 Logstash 节点统计的 JSON 数据(对应 Logstash 节点统计接口输出的字段结构,如
jvm.mem.heap_used_in_bytes、jvm.gc.collectors.young.collection_count、pipeline.events.in、process.cpu.percent等)。README 明确指出该方法依赖python protobix 库,该库封装了 Zabbix trapper/sender 协议,脚本只需把解析出的指标以key → value形式交给 protobix,即可批量推送给 Zabbix Server。 - 接收层(Zabbix trapper items):Server 侧由模板预置的 42 个 trapper 项按 key 接收数据,
logstash.node.discovery则接收含{#NODENAME}的发现 JSON,驱动 LLD 生成节点监控条目(lifetime 3d 自动清理失联节点)。 - 哨兵层(Zabbix agent active):
logstash.check(1 分钟)与logstash.discovery(1 小时)由 agent 主动模式采集,反馈脚本自身的健康状态——任何一层(脚本崩溃、JSON 解析失败、推送中断)都会体现为 check/discovery 非零或zbx_version无数据,从而触发上面的告警。
这种"trapper 收数据、agent 做哨兵、宏做版本握手"的组合,让监控项完全不受轮询间隔限制(数据按脚本自身的节奏推送),又保留了独立于推送链路的故障检测能力。
七、部署与使用要点
仓库根目录 README.md 说明了社区模板的标准使用流程,应用到本模板即:
- 获取模板文件:从 Applications/template_logstash/6.0 下载
template_logstash.yaml(Zabbix 6.0 环境;5.x 环境请使用 5.4 版 YAML 或 5.0 版 XML)。 - 导入模板:在 Zabbix 前端进入Data collection → Templates → Import,选择下载的 YAML/XML 文件导入,模板名为App Logstash,所属组为 Templates。
- 准备配套脚本:模板本身不包含采集脚本,需要按原文档说明(README Overview 中注明脚本的获取方式)部署 fredprod 提供的 logstash-zabbix 脚本及 Python protobix 库到 Logstash 节点,并确保脚本能读取 Logstash 的节点统计 JSON。
- 配置 Host 并关联模板:为主机(对应 Logstash 节点)关联
App Logstash模板,配置 Zabbix agent(active)以支撑logstash.check/logstash.discovery两个哨兵项。 - 验证:导入后检查
logstash.zbx_version是否收到脚本上报的0.0.1;若触发Logstash Template and Script version mismatched,说明脚本版本与{$ZBX_TPL_VERSION}宏不一致,需对齐两者。
八、常见问题与排障思路
Logstash heartbeat告警:logstash.zbx_version超过 10 分钟无数据,通常是脚本未运行、protobix 推送失败或 Logstash 统计 JSON 不可读。先确认脚本进程与日志,再检查 Server 端 trapper 端口连通性。Logstash check failed/Logstash discovery failed:检查脚本是否写入了非零状态值(如 JSON 解析失败、节点名获取失败),以及 agent active 模式是否正常回传。Logstash JVM Heap used percent is high / TOO HIGH:对应堆使用率持续高位,需结合heap_max_in_bytes、pools.old.*与 GC 指标判断是否需要调整-Xmx或优化 filter 链内存占用。- 发现列表为空或节点消失:确认
logstash.node.discovery是否收到含{#NODENAME}的推送;节点超过 3 天(lifetime)未上报会被自动清理,属预期行为。
总结
App Logstash模板是一套结构清晰、职责分明的 Logstash 应用监控方案:42 个 trapper 指标覆盖 JVM 堆/非堆/内存池/GC/线程、Pipeline 事件计数与耗时、进程 CPU/负载/文件描述符/虚拟内存,配合logstash.node.discovery的 LLD 节点发现、{$ZBX_TPL_VERSION}宏的版本握手、以及 check/discovery/heartbeat 三层故障哨兵,让 Logstash 节点在无 JMX、无 SNMP 的前提下获得完整可观测性。部署时请以本仓库 6.0 YAML 中的实际触发器与监控项定义为准(README 中 "no triggers" 的表述与模板文件存在出入),并注意脚本与模板的版本一致性。
【免费下载链接】community-templates
Zabbix Community Templates repository
相关推荐
Zabbix 监控 Logstash:基于 Protobix 与 Zabbix Trapper 的 App Logstash 模板实战解析
Zabbix 监控 Logstash:基于 Protobix 与 Zabbix Trapper 的 App Logstash 模板实战解析 本文以 Zabbix
Zabbix App Logstash 模板实战:基于 Python Protobix 与 Trapper 的 Logstash 监控方案
Zabbix App Logstash 模板实战:基于 Python Protobix 与 Trapper 的 Logstash 监控方案 导读 本文围绕 co
FlexGen 基准测试中的 HuggingFace Transformers:第三方基线框架的安装、核心 API 与 OPT 推理实战
FlexGen 基准测试中的 HuggingFace Transformers:第三方基线框架的安装、核心 API 与 OPT 推理实战 HuggingFace
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考