fix(ops/metrics): Alertmanager отвечал 404 на /api/v2/alerts — Prometheus писал мимо #3162

Merged
bot-backend merged 1 commit from fix/3161-alertmanager-route-prefix into main 2026-08-27 18:17:49 +00:00

View file

@ -115,6 +115,14 @@ services:
- "--config.file=/etc/alertmanager/alertmanager.yml"
- "--storage.path=/alertmanager"
- "--web.external-url=https://metrics.gendsgn.ru/alertmanager"
# Внешний адрес — ТОЛЬКО для ссылок в сообщениях; обслуживать всё под
# этим префиксом Alertmanager не должен. Без этой строки он отвечает
# 404 на `/api/v2/alerts`, а Prometheus именно туда и пишет: 27.08
# Prometheus нашёл приёмник (`activeAlertmanagers` непуст), послал
# уведомление и получил 404 — `alertmanager_alerts_received_total 0`
# при `prometheus_notifications_errors_total 1`. Тот же флаг и по той
# же причине стоит у Prometheus выше.
- "--web.route-prefix=/"
env_file:
- path: ./backend/.env.runtime
required: false
@ -136,22 +144,15 @@ services:
mem_limit: 256m
logging: *default-logging
healthcheck:
# Путь С ПРЕФИКСОМ. `--web.external-url=…/alertmanager` выше заставляет
# Alertmanager обслуживать ВСЁ под этим префиксом, включая служебные
# ручки: `/-/healthy` отдаёт 404, а `/alertmanager/-/healthy` — OK.
# Путь БЕЗ ПРЕФИКСА — вместе с `--web.route-prefix=/` выше.
#
# Прод 27.08: контейнер работал и рассылал алерты, но docker держал его
# `unhealthy` бессрочно. Само по себе безобидно, но приучает не смотреть
# на статус — а любая автоматика «перезапусти нездоровое» устроила бы из
# этого вечный перезапуск канала оповещений.
test:
[
"CMD",
"wget",
"-q",
"--spider",
"http://localhost:9093/alertmanager/-/healthy",
]
# Раньше здесь стоял `/alertmanager/-/healthy`: внешний адрес заставлял
# Alertmanager обслуживать под префиксом всё, включая служебные ручки, и
# `/-/healthy` отдавал 404 (прод 27.08 — контейнер работал, а docker
# держал его `unhealthy` бессрочно). Лечили симптом на стороне проверки,
# и потому не заметили, что тот же префикс ломает `/api/v2/alerts`, куда
# пишет Prometheus. Теперь причина убрана, и путь снова обычный.
test: ["CMD", "wget", "-q", "--spider", "http://localhost:9093/-/healthy"]
interval: 30s
timeout: 10s
retries: 5