如何使用yq按条件更新Prometheus yaml配置中targets数组的值
问题解决方法
报错根源
你的操作报错核心原因是static_configs字段为数组类型,不能直接通过.static_configs.targets访问子字段,需要先指定数组索引,你的场景中static_configs下仅有一个配置项,使用[0]取第一个元素即可。
正确操作命令
场景1:targets为单IP字符串形式
执行以下命令:
yq eval -i '.scrape_configs[] | select(.job_name == "snmp-moxa") | .static_configs[0].targets = "10.11.158.177"' prom.yaml
执行后对应配置段效果:
- job_name: 'snmp-moxa' static_configs: - targets: 10.11.158.177
场景2:targets为数组形式(符合Prometheus标准配置规范)
执行以下命令:
yq eval -i '.scrape_configs[] | select(.job_name == "snmp-moxa") | .static_configs[0].targets += ["10.11.158.177"]' prom.yaml
执行后对应配置段效果:
- job_name: 'snmp-moxa' static_configs: - targets: - 10.11.158.177
原报错说明
- 报错
Cannot index array with 'targets' (strconv.ParseInt: parsing "targets": invalid syntax):因为你直接对数组类型的static_configs用字符串targets做索引,数组仅支持数字下标索引,因此触发报错。 - 报错
expected end of expression but found '|', please check expression syntax:因为你写的IP10.11.158.177未加引号,yq解析时会把IP中的点识别为属性访问符,判定表达式不完整,因此触发语法错误。
内容的提问来源于stack exchange,提问作者ImranRazaKhan
相关产品推荐
相关产品推荐

