使用Ansible一次完成Prometheus的配置更改、检查和重新加载

修改 Prometheus 配置,修改 Alert 规则时,执行相应的专用 Playbook 真是太麻烦了。
我尝试将其在同一个 Playbook 中进行一键式的反映、检查和重新加载。

首先,需要确保在systemd的prometheus.service中可以进行重新加载操作。

[Unit]
Description=Prometheus - Monitoring system and time series database
Documentation=https://prometheus.io/docs/introduction/overview/
After=network-online.target
After=network-online.target

[Service]
User=prometheus
ExecStart=/opt/prometheus/prometheus --config.file=/opt/prometheus/prometheus.yml
ExecReload=/bin/kill -HUP $MAINPID
Restart=always

[Install]
WantedBy=multi-user.target

Per se , `Ansible` is 直翻 “脚本化配置管理工具”;

    • validateでpromtoolを使ってcheckする

 

    • changedならnotifyでreloadを実行

 

    • tagを追加して単発実行できるようにしておく

 

    handlerにreloadを作成

进行修正

- name: rule files of Prometheus
  copy:
    src:  "{{ rule }}"
    dest: "{{ root_path }}/prometheus/rules.yml"
    validate: "{{ root_path }}/prometheus/promtool check rules %s"
  notify: Reload Prometheus
  with_items:
    - files/rules.yml
  loop_control:
    loop_var: rule
  tags: rules

- name: Configure Prometheus
  template:
    src:  templates/prometheus.yml.j2
    dest: "{{ root_path }}/prometheus/prometheus.yml"
    validate: "{{ root_path }}/prometheus/promtool check config %s"
  notify: Reload Prometheus
  tags: config
- name: Reload Prometheus
  service:
    name: prometheus
    state: reloaded

只需要指定 –tag rules 来应用规则,对于配置文件,指定 –tag config 就可以反映规则。这样做不仅仅可以使用一个playbook,还可以避免因为规则或配置有错误而无法启动Prometheus的事故。

广告
将在 10 秒后关闭
bannerAds