fix(ops/metrics): Alertmanager отвечал 404 на /api/v2/alerts — Prometheus писал мимо
All checks were successful
CI Trade-In / backend-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 9s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI Trade-In / changes (pull_request) Successful in 7s
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
All checks were successful
CI Trade-In / backend-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 9s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI Trade-In / changes (pull_request) Successful in 7s
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
Приёмочная проверка #3155 показала второй отказ на том же пути. Prometheus нашёл приёмник (`activeAlertmanagers` непуст), отправил уведомление — и получил 404: `alertmanager_alerts_received_total 0` при `prometheus_notifications_errors_total 1` и `dropped_total 1`. `--web.external-url=…/alertmanager` без `--web.route-prefix=/` заставляет Alertmanager обслуживать ВСЁ под этим префиксом. Проверено прямой пробой из контейнера Prometheus: `/api/v2/status` → 404, `/alertmanager/api/v2/status` → 200. Снаружи префикс при этом никому не нужен: маршрута `/alertmanager` в Caddy нет вовсе, внешний адрес используется только для ссылок в сообщениях. Симптом этого же префикса уже ловили 27.08 на healthcheck — и вылечили на стороне проверки, прописав ей путь с префиксом. Из-за этого причина осталась жива и продолжила ломать то, что чинить куда важнее. Возвращаю обычный путь healthcheck вместе с флагом. Заодно оживает датасорс Alertmanager в Grafana (`ops/metrics/grafana/provisioning/datasources/datasources.yml:37`) — он настроен на корень и до сих пор упирался в тот же 404. Closes #3161
This commit is contained in:
parent
dc032d11fc
commit
790691d0b4
1 changed files with 16 additions and 15 deletions
|
|
@ -115,6 +115,14 @@ services:
|
||||||
- "--config.file=/etc/alertmanager/alertmanager.yml"
|
- "--config.file=/etc/alertmanager/alertmanager.yml"
|
||||||
- "--storage.path=/alertmanager"
|
- "--storage.path=/alertmanager"
|
||||||
- "--web.external-url=https://metrics.gendsgn.ru/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:
|
env_file:
|
||||||
- path: ./backend/.env.runtime
|
- path: ./backend/.env.runtime
|
||||||
required: false
|
required: false
|
||||||
|
|
@ -136,22 +144,15 @@ services:
|
||||||
mem_limit: 256m
|
mem_limit: 256m
|
||||||
logging: *default-logging
|
logging: *default-logging
|
||||||
healthcheck:
|
healthcheck:
|
||||||
# Путь С ПРЕФИКСОМ. `--web.external-url=…/alertmanager` выше заставляет
|
# Путь БЕЗ ПРЕФИКСА — вместе с `--web.route-prefix=/` выше.
|
||||||
# Alertmanager обслуживать ВСЁ под этим префиксом, включая служебные
|
|
||||||
# ручки: `/-/healthy` отдаёт 404, а `/alertmanager/-/healthy` — OK.
|
|
||||||
#
|
#
|
||||||
# Прод 27.08: контейнер работал и рассылал алерты, но docker держал его
|
# Раньше здесь стоял `/alertmanager/-/healthy`: внешний адрес заставлял
|
||||||
# `unhealthy` бессрочно. Само по себе безобидно, но приучает не смотреть
|
# Alertmanager обслуживать под префиксом всё, включая служебные ручки, и
|
||||||
# на статус — а любая автоматика «перезапусти нездоровое» устроила бы из
|
# `/-/healthy` отдавал 404 (прод 27.08 — контейнер работал, а docker
|
||||||
# этого вечный перезапуск канала оповещений.
|
# держал его `unhealthy` бессрочно). Лечили симптом на стороне проверки,
|
||||||
test:
|
# и потому не заметили, что тот же префикс ломает `/api/v2/alerts`, куда
|
||||||
[
|
# пишет Prometheus. Теперь причина убрана, и путь снова обычный.
|
||||||
"CMD",
|
test: ["CMD", "wget", "-q", "--spider", "http://localhost:9093/-/healthy"]
|
||||||
"wget",
|
|
||||||
"-q",
|
|
||||||
"--spider",
|
|
||||||
"http://localhost:9093/alertmanager/-/healthy",
|
|
||||||
]
|
|
||||||
interval: 30s
|
interval: 30s
|
||||||
timeout: 10s
|
timeout: 10s
|
||||||
retries: 5
|
retries: 5
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue