feat(observability): токен алертов приходит из секретов Actions, а не только с машины (#3078) #3126

Merged
lekss361 merged 1 commit from feat/3078-alert-secrets-from-actions into main 2026-08-27 09:53:57 +00:00
Owner

Снимает последний блокер по каналу оповещений.

Почему Alertmanager не поднимался

Профиль alerts включается, только когда заданы METRICS_TELEGRAM_BOT_TOKEN и METRICS_TELEGRAM_CHAT_ID — и это правильная защита: пустой токен дал бы Alertmanager, который стартует зелёным и молча ничего не шлёт.

Но читались эти переменные исключительно из файла окружения на инфраструктурной машине. Секреты Actions в ssh-шаг не форвардились вовсе. То есть включить алерты можно было только правкой прод-файла руками по ssh — в обход репозитория, без следа в истории, и никак не из CI.

Ровно это и держало #3078 открытым дольше нужного: стек собран, правила написаны, канал готов — а положить в него токен было некуда.

Цена промедления, измеренная сегодня

  • Продукты лежали 10 часов 15 минут, ни одно звено оповещения не сработало (#3119).
  • В тот же день сутки не доезжал деплой на прод — тоже молча (#3029).

В обоих случаях метрики видели аварию идеально. Вердикту было некуда уйти.

Что меняется

Три переменные форвардятся в шаг «Поднять серверный стек» из секретов Actions (env: + envs: у appleboy/ssh-action).

Порядок разрешения сохранён осознанно: инжектированные значения ставятся ДО того, как скрипт подхватит окружение машины, поэтому хост, если ключи заданы на нём, переопределяет секреты. Последнее слово остаётся за машиной, а секреты работают как разумный дефолт — это не отбирает у оператора возможность подменить канал локально.

Ничего, кроме форвардинга, не трогается: проверка на непустой токен, выбор профиля, рендер конфига через envsubst, amtool check-config перед подъёмом — всё как было.

Канал проверен вживую, а не по конфигу

Секреты уже заданы в репозитории. Бот — MERAsupport_bot, форум «МЕРА» (-1004443088679), тема «алерты» message_thread_id=158. Пробное сообщение доставлено, владелец подтвердил получение.

Заодно проверена и связность: доставка с Poincare прошла с третьей попытки — та самая флапающая маршрутизация к Telegram, ради которой в #3059 делался ретрай. Одиночный curl этот алерт бы потерял.

Что после мержа

Деплой метрик поднимет Alertmanager с профилем alerts, конфиг получит message_thread_id: 158, и правила Prometheus начнут доходить до темы «алерты». Проверю после выката и отпишусь в #3078.

Refs #3078, #3119, #3029, #3059, #2203

Снимает последний блокер по каналу оповещений. ## Почему Alertmanager не поднимался Профиль `alerts` включается, только когда заданы `METRICS_TELEGRAM_BOT_TOKEN` и `METRICS_TELEGRAM_CHAT_ID` — и это правильная защита: пустой токен дал бы Alertmanager, который стартует зелёным и молча ничего не шлёт. Но читались эти переменные **исключительно из файла окружения на инфраструктурной машине**. Секреты Actions в ssh-шаг не форвардились вовсе. То есть включить алерты можно было только правкой прод-файла руками по ssh — в обход репозитория, без следа в истории, и никак не из CI. Ровно это и держало #3078 открытым дольше нужного: стек собран, правила написаны, канал готов — а положить в него токен было некуда. ## Цена промедления, измеренная сегодня - Продукты лежали **10 часов 15 минут**, ни одно звено оповещения не сработало (#3119). - В тот же день сутки не доезжал деплой на прод — тоже молча (#3029). В обоих случаях метрики видели аварию идеально. Вердикту было некуда уйти. ## Что меняется Три переменные форвардятся в шаг «Поднять серверный стек» из секретов Actions (`env:` + `envs:` у `appleboy/ssh-action`). **Порядок разрешения сохранён осознанно:** инжектированные значения ставятся ДО того, как скрипт подхватит окружение машины, поэтому хост, если ключи заданы на нём, переопределяет секреты. Последнее слово остаётся за машиной, а секреты работают как разумный дефолт — это не отбирает у оператора возможность подменить канал локально. Ничего, кроме форвардинга, не трогается: проверка на непустой токен, выбор профиля, рендер конфига через `envsubst`, `amtool check-config` перед подъёмом — всё как было. ## Канал проверен вживую, а не по конфигу Секреты уже заданы в репозитории. Бот — `MERAsupport_bot`, форум «МЕРА» (`-1004443088679`), тема «алерты» `message_thread_id=158`. Пробное сообщение доставлено, владелец подтвердил получение. Заодно проверена и связность: доставка с Poincare прошла **с третьей попытки** — та самая флапающая маршрутизация к Telegram, ради которой в #3059 делался ретрай. Одиночный `curl` этот алерт бы потерял. ## Что после мержа Деплой метрик поднимет Alertmanager с профилем `alerts`, конфиг получит `message_thread_id: 158`, и правила Prometheus начнут доходить до темы «алерты». Проверю после выката и отпишусь в #3078. Refs #3078, #3119, #3029, #3059, #2203
lekss361 added 1 commit 2026-08-27 09:52:52 +00:00
feat(observability): токен алертов приходит из секретов Actions, а не только с машины (#3078)
All checks were successful
CI Trade-In / changes (pull_request) Successful in 9s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / changes (pull_request) Successful in 10s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
30a21abfa7
Стек наблюдаемости был готов ещё вчера, но Alertmanager не поднимался:
профиль alerts включается, только когда заданы METRICS_TELEGRAM_BOT_TOKEN и
METRICS_TELEGRAM_CHAT_ID, а читались они ИСКЛЮЧИТЕЛЬНО из файла окружения на
инфраструктурной машине. То есть включить алерты можно было только правкой
прод-файла руками по ssh — в обход репозитория, без следа в истории и без
возможности сделать это из CI.

Именно это и держало задачу открытой дольше нужного. Цена промедления
измерена: 27.08 продукты лежали 10 часов, и ни одно звено оповещения не
сработало (#3119); в тот же день сутки не доезжал деплой, и об этом тоже
никто не узнал (#3029).

Теперь три переменные форвардятся в ssh-шаг из секретов Actions. Порядок
разрешения сохранён осознанно: инжектированные значения ставятся ДО того,
как скрипт подхватит окружение машины, поэтому хост, если ключи заданы на
нём, переопределяет секреты — последнее слово остаётся за машиной, а
секреты работают как разумный дефолт.

Канал проверен вживую: бот MERAsupport_bot, форум «МЕРА», тема «алерты»
(message_thread_id=158) — пробное сообщение доставлено.
lekss361 merged commit 5ffd4fe28e into main 2026-08-27 09:53:57 +00:00
lekss361 deleted branch feat/3078-alert-secrets-from-actions 2026-08-27 09:53:57 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#3126
No description provided.