Add a new alertmanager role (installed via apt, same pattern as prometheus/blackbox_exporter), wire it into the existing (currently commented-out) alerting:/rule_files: sections of roles/prometheus/templates/prometheus.yml.j2, add a Prometheus alert rule that fires when a blackbox-http probe fails for 5m, and route Alertmanager notifications to a Telegram channel via a bot (native telegram_configs receiver, no extra webhook service needed). Telegram bot token + chat ID go into vault-encrypted group_vars/secrets.yml as vault_secrets.alertmanager.telegram_bot_token / vault_secrets.alertmanager.telegram_chat_id (user will add these manually via ansible-vault edit).
- Create
roles/alertmanager/tasks/main.yml— mirrorsroles/blackbox_exporter/tasks/main.ymlpattern:ansible.builtin.aptinstallprometheus-alertmanager,update_cache: trueansible.builtin.templatedeployalertmanager.yml.j2→/etc/prometheus/alertmanager.yml, owner/group root, mode 0644,notify: Restart alertmanageransible.builtin.systemdenable+startprometheus-alertmanager
- Create
roles/alertmanager/handlers/main.yml— handlerRestart alertmanager(systemd restartprometheus-alertmanager), same shape asroles/blackbox_exporter/handlers/main.yml. - Create
roles/alertmanager/templates/alertmanager.yml.j2:route:default receiver =telegram,group_by: ['alertname', 'instance'],group_wait/group_interval/repeat_intervalreasonable defaults (e.g. 30s/5m/3h)receivers:one receivertelegramusing nativetelegram_configs- Listen address bound to localhost only
- Create
roles/prometheus/templates/alert_rules.yml.j2with a rule group:groups: - name: blackboxcontaining rulealert: ProbeFailed,expr: probe_success == 0,for: 5m,labels: severity: critical,annotations: summary/descriptionreferencing$labels.instanceand$labels.job
- Update
roles/prometheus/tasks/main.yml— add a task templatingalert_rules.yml.j2→/etc/prometheus/alert_rules.yml(owner/group root, mode 0644) before the restart task.
- Edit
roles/prometheus/templates/prometheus.yml.j2:- Uncomment
alerting.alertmanagers[0].static_configs[0].targetsand set to["127.0.0.1:9093"] - Uncomment
rule_files:and set to["/etc/prometheus/alert_rules.yml"]
- Uncomment
- Edit
setup.ymlmonitoring play — add{role: alertmanager, tags: "alertmanager"}to theroles:list.
- User runs
ansible-vault edit group_vars/secrets.ymland adds:vault_secrets: alertmanager: telegram_bot_token: "<token from BotFather>" telegram_chat_id: <numeric chat/channel id, negative for channels>
roles/alertmanager/tasks/main.yml— new, install + configure + startroles/alertmanager/handlers/main.yml— new, restart handlerroles/alertmanager/templates/alertmanager.yml.j2— new, route + telegram receiverroles/prometheus/templates/alert_rules.yml.j2— new,ProbeFailedrule onprobe_success == 0roles/prometheus/tasks/main.yml— add template task for alert_rules.ymlroles/prometheus/templates/prometheus.yml.j2— uncomment/fillalerting:andrule_files:sectionssetup.yml— addalertmanagerrole to monitoring playgroup_vars/secrets.yml— user addsvault_secrets.alertmanager.telegram_bot_token/telegram_chat_idmanually viaansible-vault edit
ansible-playbook setup.yml --syntax-checkafter editsansible-playbook setup.yml --limit monitoring --tags alertmanager,prometheus --check --diffdry run- Deploy for real:
ansible-playbook setup.yml --limit monitoring --tags alertmanager,prometheus - On monitoring host:
systemctl status prometheus-alertmanager,curl -s http://127.0.0.1:9093/-/healthy - Prometheus UI → Status → Rules: confirm
ProbeFailedrule loaded; Status → Alertmanagers: confirm target127.0.0.1:9093shown as up - Trigger a real test: temporarily break reachability for one target and confirm a Telegram message arrives in the channel after ~5m
promtool check config/promtool check ruleson rendered files if promtool available on monitoring host
- Alertmanager installed via apt (
prometheus-alertmanagerDebian package) for consistency with existing prometheus/blackbox_exporter roles — no version pinning ingroup_vars/versions.yml. - Alert firing delay:
for: 5monprobe_success == 0. - Telegram integration uses Alertmanager's native
telegram_configsreceiver (built into Alertmanager since v0.25) rather than a separate telegram-webhook bridge service. - Scope: only blackbox probe reachability alerts for now. Not adding alerts for node_exporter/gateway/ffshmon/disk/CPU etc. in this pass.
- Alertmanager bound to localhost (127.0.0.1:9093), reached by Prometheus on the same monitoring host — not exposed externally.
- Telegram bot/channel setup guidance (creating bot via @BotFather, obtaining numeric chat ID for a channel) provided as part of implementation.