Zabbix中如何将自动发现规则的LLD宏值以非数组形式传入Item原型Key?
解决Zabbix自动发现宏传递单值的问题
问题分析
你遇到的核心问题有两个:
- 自动发现规则的JSONPath配置错误,导致提取到的是
disk字段值的数组而非单个值 - 混淆了LLD宏和普通用户宏的格式(LLD宏应为
{#DISK}而非{$DISK})
修正步骤
调整自动发现规则的JSONPath设置
- 打开依赖型自动发现规则的配置界面
- 将主JSONPath设为
$(此路径指向整个JSON数组) - 针对LLD宏
{#DISK},将其对应的JSONPath设为disk(此路径指向数组内每个对象的disk属性)
修复Item原型的宏格式
将Item原型的Key修改为:system.run["smartctl -A /dev/{#DISK}"]注意:LLD宏的格式是
{#宏名},而普通用户宏是{$宏名},两者不能混用。优化预处理代码(可选)
你现有的预处理逻辑可以简化,避免冗余的循环操作:// 匹配所有/dev/sd开头的磁盘路径 const diskPaths = value.match(/\/dev\/sd[a-z]/g); // 转换为LLD需要的JSON格式,去掉/dev/前缀 const lldData = diskPaths.map(path => ({ disk: path.replace('/dev/', '') })); return JSON.stringify(lldData);这段代码直接生成符合Zabbix LLD要求的JSON数组,逻辑更清晰高效。
完成上述调整后,LLD宏{#DISK}会被正确赋值为单个字符串(如sda),Item原型将生成正确的Key:system.run["smartctl -A /dev/sda"]。
内容的提问来源于stack exchange,提问作者Tonik
相关产品推荐
相关产品推荐

