使用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的事故。