From 30a21abfa7f8b1229fd73760ecdbb4723988031b Mon Sep 17 00:00:00 2001 From: bot-backend Date: Thu, 27 Aug 2026 12:52:25 +0300 Subject: [PATCH] =?UTF-8?q?feat(observability):=20=D1=82=D0=BE=D0=BA=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=B0=D0=BB=D0=B5=D1=80=D1=82=D0=BE=D0=B2=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B8=D1=85=D0=BE=D0=B4=D0=B8=D1=82=20=D0=B8=D0=B7=20?= =?UTF-8?q?=D1=81=D0=B5=D0=BA=D1=80=D0=B5=D1=82=D0=BE=D0=B2=20Actions,=20?= =?UTF-8?q?=D0=B0=20=D0=BD=D0=B5=20=D1=82=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE=20?= =?UTF-8?q?=D1=81=20=D0=BC=D0=B0=D1=88=D0=B8=D0=BD=D1=8B=20(#3078)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Стек наблюдаемости был готов ещё вчера, но 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) — пробное сообщение доставлено. --- .forgejo/workflows/deploy-metrics.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/.forgejo/workflows/deploy-metrics.yml b/.forgejo/workflows/deploy-metrics.yml index 51764969..336f322a 100644 --- a/.forgejo/workflows/deploy-metrics.yml +++ b/.forgejo/workflows/deploy-metrics.yml @@ -71,9 +71,25 @@ jobs: echo "::warning title=SSH без проверки подлинности хоста::${SRC} не задан — ключ хоста НЕ проверяется (#3029)." fi + # #3078: канал доставки алертов приходит ИЗ СЕКРЕТОВ ACTIONS, а не только + # из окружения инфраструктурного хоста. Раньше эти три переменные брались + # исключительно из файла окружения на машине — то есть включить алерты + # можно было только правкой прод-файла руками по ssh. Это и держало #3078 + # открытым дольше нужного: стек был готов, а положить в него токен было + # некуда, кроме как в обход репозитория. + # + # Порядок разрешения важен: инжектированные значения ставятся ДО того, как + # скрипт подхватит окружение машины, поэтому файл на хосте, если ключи в + # нём заданы, ПЕРЕОПРЕДЕЛЯЕТ секреты. Так и задумано — у машины остаётся + # последнее слово, а секреты работают как разумный дефолт. - name: Поднять серверный стек uses: appleboy/ssh-action@v1.0.3 + env: + METRICS_TELEGRAM_BOT_TOKEN: ${{ secrets.METRICS_TELEGRAM_BOT_TOKEN }} + METRICS_TELEGRAM_CHAT_ID: ${{ secrets.METRICS_TELEGRAM_CHAT_ID }} + METRICS_TELEGRAM_TOPIC_ID: ${{ secrets.METRICS_TELEGRAM_TOPIC_ID }} with: + envs: METRICS_TELEGRAM_BOT_TOKEN,METRICS_TELEGRAM_CHAT_ID,METRICS_TELEGRAM_TOPIC_ID host: ${{ secrets.INFRA_DEPLOY_HOST || secrets.DEPLOY_HOST }} username: ${{ secrets.INFRA_DEPLOY_USER || secrets.DEPLOY_USER }} key: ${{ secrets.INFRA_DEPLOY_SSH_KEY || secrets.DEPLOY_SSH_KEY }} -- 2.45.3