首页 > 解决方案 > SaltStack 为 prometheus 目标生成 json

问题描述

如何使用盐将目标添加到 json 文件,我在 prometheus.yml 中使用 file_sd_configs 文件

  - job_name: 'winserver_node'
    file_sd_configs:
    - files:
      - targets.json

目标.json:

[
  {
    "targets": [ "192.168.1.2:9182" ],
    "labels": {
      "env": "dev",
      "job": "devjob",
      "instance": "Test001"
    }
  },
  {
    "targets": [ "192.168.1.3:9182" ],
    "labels": {
      "env": "dev",
      "job": "devjob",
      "instance": "Test002"
    }
  }
]

并且 wroute 一些带有柱子的 example.sls,但我想知道如何使用 file.blockreplace 生成它。

#SLS for adding targets for prometheus (nodes)
{% set minion =  salt['pillar.get']('variables:some:instance') %}
{% set minionip = salt ['pillar.get']('variables:some:ip') %}
{% set promenv = salt['pillar.get']('variables:some:promenv') %}
{% set job = salt['pillar.get']('variables:some:devjob') %}
{% set port = salt['pillar.get']('variables:some:exporterport') %}

make-config:
  file.managed:
    - name: /etc/prometheus/targets.json
    - source: salt://prometheus/targets_template.json

main-block:
  file.blockreplace:
    - name: /etc/prometheus/targets.json
    - marker_start: "# START managed zone Target {{ minion }} -DO-NOT-EDIT-"
    - marker_end: "# END managed zone Target {{ minion }} --"
    - backup: '.bak'
    - show_changes: True
    - append_if_not_found: True

我也有一些问题,和[]

标签: jsonjinja2salt-stack

解决方案


file_sd_configs 可能是 yml 格式。所以最终的结果是这样的:

/etc/prometheus/linuxtargets.yml:
  file.touch

main-lin-block:
  file.blockreplace:
    - name: /etc/prometheus/linuxtargets.yml
    - marker_start: "# START managed zone {{ minion }} -DO-NOT-EDIT-"
    - marker_end: "# END managed zone {{ minion }} --"
    - backup: '.bak'
    - show_changes: True
    - append_if_not_found: True

targets-lin-block:
  file.accumulated:
    - filename: /etc/prometheus/linuxtargets.yml
    - name: targets-accum
    - text: |
            - targets:
              - '{{ minionip }}:{{ port }}'
              labels:
                instance: '{{ minion }}'
                job: '{{ job }}'
                env: '{{ promenv  }}'
    - require_in:
      - file: main-lin-block

推荐阅读