Zabbix 6.2.4中如何基于AWS ASG实例ID自动发现监控项
解决Zabbix 6.2.4中ASG实例健康状态监控项原型生成问题
一、调整发现规则的JSONPath(核心步骤)
你当前的JSONPath仅提取了InstanceId列表,但Zabbix自动发现需要输出键值对格式的JSON数组(每个元素是包含自定义宏的对象),这样监控项原型才能关联对应实例的属性。修改预处理的JSONPath为:$.AutoScalingGroups[*].Instances[*].{"{#INSTANCE_ID}": @.InstanceId, "{#HEALTH_STATUS}": @.HealthStatus}
修改后发现规则会输出类似如下的结构:
[ {"{#INSTANCE_ID}": "i-xxx111", "{#HEALTH_STATUS}": "Healthy"}, {"{#INSTANCE_ID}": "i-xxx222", "{#HEALTH_STATUS}": "Unhealthy"} ]
此时每个实例的ID和健康状态会被封装为可被监控项原型引用的宏变量。
二、创建监控项原型
- 进入目标发现规则的配置页面,切换到监控项原型标签页,点击「创建监控项原型」。
- 配置核心参数:
- 名称:填写
ASG实例 {#INSTANCE_ID} 健康状态(每个实例的监控项名称会自动替换为对应的实例ID) - 键:自定义键名,比如
aws.asg.instance.health[{#INSTANCE_ID}](通过宏关联实例ID,确保每个监控项对应唯一实例) - 类型:选择与主项一致的类型(比如
HTTP agent,取决于你获取ASG数据的方式) - 更新间隔:根据业务需求设置(例如300秒)
- 值类型:若健康状态仅为
Healthy/Unhealthy,可选择布尔型并设置映射(Healthy=1,Unhealthy=0);也可选择字符型直接展示状态文本。
- 名称:填写
- 提取对应实例的健康状态:
如果主项已能获取完整ASG JSON数据,在监控项原型中添加两步预处理:- 第一步选择
JSONPath,参数填写$.AutoScalingGroups[*].Instances[?(@.InstanceId == "{#INSTANCE_ID}")].HealthStatus(通过实例ID过滤匹配对应的健康状态) - 第二步选择
提取,去除数组格式(JSONPath会返回数组如["Healthy"],提取后得到纯文本值)
- 第一步选择
三、验证配置
- 保存监控项原型后,回到发现规则页面,点击「执行检查」,确认发现的实例列表正确带出
{#INSTANCE_ID}和{#HEALTH_STATUS}宏。 - 等待Zabbix自动发现执行(或手动触发),在「最新数据」中查看是否生成了对应每个实例的监控项,且健康状态值正确。
注意事项
- 确保获取ASG数据的主项拥有足够AWS权限:IAM权限需包含
autoscaling:DescribeAutoScalingGroups - Zabbix 6.2的JSONPath支持过滤表达式
[?()],可直接通过实例ID精准匹配目标数据
内容的提问来源于stack exchange,提问作者Oleksandr Lytvynskyi
相关产品推荐
相关产品推荐

