Prometheusの設定変更、Alertルールの変更した際にそれ専用のPlaybookを実行するとか面倒すぎる
同じplaybookで一発で反映・チェック・Reloadまでできるようにしてみた
まず、systemdのprometheus.serviceでReloadできるようにしておく
[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
Ansibleは
- validateでpromtoolを使ってcheckする
- changedならnotifyでreloadを実行
- tagを追加して単発実行できるようにしておく
- handlerにreloadを作成
と修正
task
- 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
handler
- name: Reload Prometheus
service:
name: prometheus
state: reloaded
ruleを反映させるには --tag rules
、config fileの場合は --tag config
を指定するだけ
playbookも1つで済むし、rulesやconfigが間違っててPrometheus起動できないっていう事故も無くせるので