From c9a9085df6b8ad16e39476d4a92558d7c94ffb1f Mon Sep 17 00:00:00 2001 From: bot-backend Date: Sun, 6 Sep 2026 02:11:38 +0500 Subject: [PATCH] =?UTF-8?q?fix(deploy-metrics):=20=D0=BF=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=B2=D0=B0=D1=82=D1=8C=20alloy?= =?UTF-8?q?=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=20=D0=B2=D1=8B=D0=BA=D0=B0?= =?UTF-8?q?=D1=82=D0=B0=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=D0=B0,=20?= =?UTF-8?q?=D0=B3=D0=B5=D0=B9=D1=82=20=D0=BF=D0=BE=20=D0=B8=D0=BD=D0=BE?= =?UTF-8?q?=D0=B4=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Конфиг Alloy смонтирован бинд-маунтом ОДНОГО файла, а `git reset --hard` в деплое не правит его на месте, а пишет новым инодом. `up -d` сравнивает описание сервиса, содержимое бинд-маунта в сравнение не входит — контейнер не пересоздаётся и продолжает читать прежний, уже удалённый инод. Отказ беззвучный: на диске новый конфиг, деплой зелёный, а фильтрация идёт по старому. Пойман на проде 06.09: на Beget после success-деплоя контейнер держал инод от 26.08, и новый фильтр заработал только после ручного `docker restart gendesign-alloy`. Тот же приём, что у alertmanager в джобе server. Позиции чтения журнала лежат в томе alloy_data и пересоздание переживают. Гейт после подъёма сверяет инод файла на хосте с инодом внутри контейнера: расхождение = деплой красный, а не «зелёный со старым конфигом». --- .forgejo/workflows/deploy-metrics.yml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/.forgejo/workflows/deploy-metrics.yml b/.forgejo/workflows/deploy-metrics.yml index 7b101edc..559784aa 100644 --- a/.forgejo/workflows/deploy-metrics.yml +++ b/.forgejo/workflows/deploy-metrics.yml @@ -419,11 +419,22 @@ jobs: docker compose -p gendesign-metrics-agent \ -f docker-compose.metrics-agent.yml up -d + # Конфиг Alloy — бинд-маунт ОДНОГО файла, а `git reset --hard` выше пишет + # его новым инодом: `up -d` изменения не видит, контейнер держит старый. + METRICS_ROLE=apps \ + METRICS_ALLOY_CONFIG=alloy-apps.alloy \ + COMPOSE_PROFILES="$EXPORTER_PROFILE" \ + docker compose -p gendesign-metrics-agent \ + -f docker-compose.metrics-agent.yml up -d --force-recreate alloy + sleep 10 METRICS_ROLE=apps METRICS_ALLOY_CONFIG=alloy-apps.alloy COMPOSE_PROFILES="$EXPORTER_PROFILE" \ docker compose -p gendesign-metrics-agent \ -f docker-compose.metrics-agent.yml ps + [ "$(stat -c %i ops/metrics/alloy/alloy-apps.alloy)" = "$(docker exec gendesign-alloy stat -c %i /etc/alloy/config.alloy)" ] \ + || { echo "::error::alloy читает старый инод конфига"; exit 1; } + agent-infra: runs-on: ubuntu-latest needs: server @@ -478,7 +489,18 @@ jobs: docker compose -p gendesign-metrics-agent \ -f docker-compose.metrics-agent.yml up -d + # Конфиг Alloy — бинд-маунт ОДНОГО файла, а `git reset --hard` (джоба server) + # пишет его новым инодом: `up -d` изменения не видит, контейнер держит старый. + METRICS_ROLE=infra \ + METRICS_ALLOY_CONFIG=alloy-infra.alloy \ + COMPOSE_PROFILES="$EXPORTER_PROFILE" \ + docker compose -p gendesign-metrics-agent \ + -f docker-compose.metrics-agent.yml up -d --force-recreate alloy + sleep 10 METRICS_ROLE=infra METRICS_ALLOY_CONFIG=alloy-infra.alloy COMPOSE_PROFILES="$EXPORTER_PROFILE" \ docker compose -p gendesign-metrics-agent \ -f docker-compose.metrics-agent.yml ps + + [ "$(stat -c %i ops/metrics/alloy/alloy-infra.alloy)" = "$(docker exec gendesign-alloy stat -c %i /etc/alloy/config.alloy)" ] \ + || { echo "::error::alloy читает старый инод конфига"; exit 1; }