deploy-metrics: up -d не перечитывает одно-файловый bind-mount конфига Alloy (Beget читал конфиг 26.08 после успешного деплоя #3377) #3380

Closed
opened 2026-09-05 21:05:27 +00:00 by bot-backend · 1 comment
Collaborator

Факт (2026-09-06). Deploy Metrics / agent-infra на 1cff12cc — success, файл /opt/gendesign/ops/metrics/alloy/alloy-infra.alloy на Beget обновлён (inode 551819), но контейнер gendesign-alloy (создан 26.08) продолжал держать старый inode 572205 через bind-mount одного файла …/alloy-infra.alloy -> /etc/alloy/config.alloy: grep -c apikey в контейнере = 0 при 1 на хосте. Второй слой маскировки #3377 на инфра-хосте не работал, пока я не сделал docker restart gendesign-alloy руками (после — inode 551819, проба api_key=*** в Loki).

Причина. git checkout/reset пишет файл новым inode; bind-mount одного файла привязан к старому. docker compose up -d в .forgejo/workflows/deploy-metrics.yml (шаги agent-apps ~L419 и agent-infra) не пересоздаёт контейнер — для compose конфигурация сервиса не изменилась. Alloy не умеет reload по SIGHUP из коробки в этой конфигурации.

Чинить: после up -d в обоих agent-шагах — docker compose … up -d --force-recreate alloy (позиции чтения журнала лежат в volume alloy_data, не теряются) либо docker restart gendesign-alloy. Приёмка: после деплоя stat -c %i файла на хосте == docker exec gendesign-alloy stat -c %i /etc/alloy/config.alloy на обоих хостах, без ручного рестарта.

Связано: #3377, #3354. См. также declared-config-may-not-execute — «success» деплоя измерял доставку файла, а не то, что его читает процесс.

**Факт (2026-09-06).** `Deploy Metrics / agent-infra` на `1cff12cc` — success, файл `/opt/gendesign/ops/metrics/alloy/alloy-infra.alloy` на Beget обновлён (inode 551819), но контейнер `gendesign-alloy` (создан 26.08) продолжал держать **старый inode 572205** через bind-mount одного файла `…/alloy-infra.alloy -> /etc/alloy/config.alloy`: `grep -c apikey` в контейнере = 0 при 1 на хосте. Второй слой маскировки #3377 на инфра-хосте не работал, пока я не сделал `docker restart gendesign-alloy` руками (после — inode 551819, проба `api_key=***` в Loki). **Причина.** `git checkout`/`reset` пишет файл новым inode; bind-mount одного файла привязан к старому. `docker compose up -d` в `.forgejo/workflows/deploy-metrics.yml` (шаги agent-apps ~L419 и agent-infra) не пересоздаёт контейнер — для compose конфигурация сервиса не изменилась. Alloy не умеет reload по SIGHUP из коробки в этой конфигурации. **Чинить:** после `up -d` в обоих agent-шагах — `docker compose … up -d --force-recreate alloy` (позиции чтения журнала лежат в volume `alloy_data`, не теряются) либо `docker restart gendesign-alloy`. Приёмка: после деплоя `stat -c %i` файла на хосте == `docker exec gendesign-alloy stat -c %i /etc/alloy/config.alloy` на обоих хостах, без ручного рестарта. Связано: #3377, #3354. См. также [[declared-config-may-not-execute]] — «success» деплоя измерял доставку файла, а не то, что его читает процесс.
Author
Collaborator

Приёмка PR #3381 на проде (2026-09-05 21:18 UTC, деплой самого мержа 8a969c06): Deploy Metrics server/agent-apps/agent-infra — success, гейт по иноду прошёл на обоих хостах без ручного рестарта:

хост инод файла на хосте инод /etc/alloy/config.alloy в контейнере контейнер
Poincare (apps) 5115113 5115113 пересоздан 21:18:19, healthy
Beget (infra) 551819 551819 пересоздан 21:18:20, healthy

Критерий из issue (stat -c %i хост == контейнер на обоих хостах после деплоя) выполнен.

Приёмка PR #3381 на проде (2026-09-05 21:18 UTC, деплой самого мержа `8a969c06`): `Deploy Metrics` server/agent-apps/agent-infra — success, гейт по иноду прошёл на обоих хостах **без ручного рестарта**: | хост | инод файла на хосте | инод `/etc/alloy/config.alloy` в контейнере | контейнер | |---|---|---|---| | Poincare (apps) | 5115113 | 5115113 | пересоздан 21:18:19, healthy | | Beget (infra) | 551819 | 551819 | пересоздан 21:18:20, healthy | Критерий из issue (`stat -c %i` хост == контейнер на обоих хостах после деплоя) выполнен.
Sign in to join this conversation.
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#3380
No description provided.