Ansible结合Jinja2渲染Prometheus prometheus.yml模板的方法
可直接落地的Prometheus模板生成方案
前置参考:Ansible主机清单配置
按照你的环境划分,inventory配置参考如下,确保变量定义和分组匹配:
# /etc/ansible/hosts 配置参考 [prometheus-server] promserver.domain.es [prometheus-exporter] exporter01 ansible_host=192.168.1.11 spring_port=[20001, 20002] exporter02 ansible_host=192.168.1.12 spring_port=[20001, 20002] exporter03 ansible_host=192.168.1.13 spring_port=[20001]
核心Jinja2模板实现
模板的核心逻辑是先全局去重所有Exporter节点开放的端口,再按端口维度筛选匹配的节点聚合到同一抓取任务,避免原来逐节点生成任务导致的同端口任务拆分问题。
完整的prometheus.yml.j2模板代码如下:
{%- set unique_ports = [] %} {# 第一步:遍历所有Exporter节点,收集去重后的端口列表 #} {%- for exporter_host in groups['prometheus-exporter'] %} {%- for port in hostvars[exporter_host]['spring_port'] %} {%- if port not in unique_ports %} {%- set _ = unique_ports.append(port) %} {%- endif %} {%- endfor %} {%- endfor %} # 全局标准配置 global: scrape_interval: 15s evaluation_interval: 15s # 内置自监控抓取任务 scrape_configs: - job_name: "prometheus" static_configs: - targets: ["localhost:9090"] {# 第二步:按去重后的端口逐个生成抓取任务,聚合所有匹配端口的节点 #} {%- for port in unique_ports %} - job_name: "spring-actuator-{{ port }}" metrics_path: "/actuator/prometheus" scrape_interval: 5s static_configs: - targets: {%- for exporter_host in groups['prometheus-exporter'] %} {%- if port in hostvars[exporter_host]['spring_port'] %} - "{{ hostvars[exporter_host]['ansible_host'] }}:{{ port }}" {%- endif %} {%- endfor %} labels: app_group: "spring_service" {%- endfor %}
配置输出效果验证
模板渲染后生成的内容完全匹配你的预期:
- 20001端口对应的抓取任务会聚合3台Exporter节点的
192.168.1.11:20001、192.168.1.12:20001、192.168.1.13:20001三个目标 - 20002端口对应的抓取任务会聚合2台Exporter节点的
192.168.1.11:20002、192.168.1.12:20002两个目标 - 全局配置、Prometheus自监控配置会按标准格式生成,无需额外调整
落地注意事项
- 模板中使用
hostvars[exporter_host]['ansible_host']获取节点可被Prometheus访问的实际IP,如果你的环境支持主机名DNS解析,可直接替换为exporter_host变量值 - 列表追加值时使用
{% set _ = 列表.append() %}的写法,是为了规避Jinja2在循环内的作用域隔离问题,确保去重后的端口列表能被正确收集 - 模板中使用
{%- %}的裁剪语法自动移除多余空行,保证生成的YAML文件缩进符合Prometheus配置要求 - 如果后续新增Exporter节点、调整开放端口,无需修改模板内容,只需要在主机清单里更新对应节点的
spring_port变量,重新执行Ansible部署即可自动更新抓取配置
内容的提问来源于stack exchange,提问作者Javier Matos
相关产品推荐
相关产品推荐

