feat(observability): алерты адресуются в топик форумной группы + проверка конфига до подъёма (#3078) #3111
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
ИРД
вторичка
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#3111
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "feat/3078-alert-topic"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Бот для тревог — тот же, что пересылает сообщения поддержки, а его чат форумный. Без
message_thread_idAlertmanager кладёт алерты в общую тему, вперемешку с клиентской перепиской.Поле действительно поддерживается
Проверено
amtool check-configна том же образе, что поднимается в проде (prom/alertmanager:v0.28.0): конфиг сmessage_thread_id: 42принимается. Схема Alertmanager строгая и неизвестные поля отвергает — значит успешная проверка означает поддержку, а не молчаливое игнорирование. Контрольный конфиг без этого поля тоже валиден.Почему подставляется целая строка, а не значение
envsubstне умеет условий. При шаблоне видаmessage_thread_id: ${METRICS_TELEGRAM_TOPIC_ID}незаданный топик дал бы в конфиге:И это не деградация: Alertmanager с таким конфигом не стартует вовсе — алертинг исчезает целиком, а контейнер просто не поднимается. Поэтому деплой формирует либо всю строку с отступом, либо пустую:
Топик необязателен — без него поле отсутствует и алерты уходят в общую тему, как раньше.
Результат подстановки проверен глазами в обоих режимах:
Отступ 8 пробелов, вровень с соседними полями.
Попутно: проверка конфига до подъёма стека
Добавлен
amtool check-configпередcompose up— по образцуcaddy validateниже в этом же файле, и по той же причине: битый конфиг Alertmanager не деградирует, а выключает алертинг молча.amtoolберётся из того же образа, что и сам Alertmanager (версия читается изdocker-compose.metrics.yml), иначе проверялась бы не та версия схемы.Тесты
backend/tests/ops/test_3078_alert_topic.py, 4 штуки. Рендерят шаблон обоими способами и разбирают результат как YAML — проверяется фактический конфиг, а не наличие нужных слов в тексте:telegram-heartbeat— иначе «мониторинг жив» капал бы мимо темы и это заметили бы не сразу;chat_idпри этом не пострадал;envsubst— забыть её значит оставить в конфиге литерал${METRICS_TELEGRAM_TOPIC_LINE}, на котором Alertmanager не стартует;Фальсификация: на исходных файлах краснеют 3 из 4. Проходит только второй — он фиксирует сохранённое поведение при незаданном топике, а не регресс.
Проверено помимо тестов: YAML воркфлоу парсится, в коммите нет CR,
tests/opsцеликом — 35 passed.Что нужно от владельца
Переменные секретные, поэтому задаются вручную на Beget:
METRICS_TELEGRAM_BOT_TOKEN,METRICS_TELEGRAM_CHAT_IDи — опционально —METRICS_TELEGRAM_TOPIC_ID. После этого запускаю деплой и проверяю, что тревога реально доходит в чат, а не что контейнер стал зелёным.Refs #3078
Бот, которым шлются тревоги, — тот же, что пересылает сообщения поддержки, а его чат форумный. Без message_thread_id Alertmanager кладёт тревоги в общую тему, вперемешку с клиентской перепиской. Поле поддерживается: проверено amtool check-config на том же образе, что поднимается в проде (prom/alertmanager:v0.28.0). Схема Alertmanager строгая и неизвестные поля отвергает, так что успешная проверка означает именно поддержку, а не молчаливое игнорирование. Подставляется ЦЕЛАЯ СТРОКА, а не значение: envsubst не умеет условий, и при шаблоне вида `message_thread_id: ${TOPIC_ID}` незаданный топик дал бы `message_thread_id:` без значения. Это не деградация - Alertmanager с таким конфигом не стартует вовсе, то есть алертинг исчезает целиком. Деплой формирует либо всю строку с отступом, либо пустую. Топик необязателен: без него поле отсутствует, алерты уходят в общую тему, поведение прежнее. Попутно добавлена проверка конфига через amtool ДО подъёма стека - по образцу `caddy validate` ниже в этом же файле. amtool берётся из того же образа, что и сам Alertmanager, иначе проверялась бы не та версия схемы. Битый конфиг теперь роняет деплой громко, а не выключает алертинг тихо. Тесты (4) рендерят шаблон обоими способами и разбирают результат как YAML - проверяется фактический конфиг, а не наличие нужных слов в тексте. Отдельно проверено, что переменная объявлена в списке envsubst: забыть её - значит оставить в конфиге литерал плейсхолдера. Фальсификация: на исходных файлах краснеют 3 из 4; проходит только тест, фиксирующий сохранённое поведение при незаданном топике. tests/ops целиком - 35 passed.