postgres-exporter: queries.yml примонтирован одиночным файлом и читается только при старте — правка не вступит в силу, джобы агентов пересоздают тольк… #3486

Open
opened 2026-09-12 11:12:25 +00:00 by bot-backend · 0 comments
Collaborator

Найдено 12.09.2026 при ревью PR #3475 (#3467). Разрыв латентный, не живой — но класс ровно тот же, что уже стоил нам молчащей правки правил Prometheus.

Факт

docker-compose.metrics-agent.yml:203, 226, 250 — на всех трёх экспортёрах Postgres:

- ./ops/metrics/postgres/queries.yml:/etc/pg-queries.yml:ro

Одиночный файловый маунт. PG_EXPORTER_EXTEND_QUERY_PATH читается процессом при старте, а джобы агентов в deploy-metrics.yml (:524, :594) пересоздают только alloy.

Следствие: правка ops/metrics/postgres/queries.yml ляжет на диск, git reset --hard запишет новый инод, работающий контейнер продолжит читать старый, и деплой останется зелёным. Дословно #3467.

Почему не горит прямо сейчас

Замер 12.09: иноды хоста и контейнера совпадают (569352) — файл правился один раз, ещё до создания контейнеров. То есть разрыв есть по построению, но ни разу не сработал.

Почему это не поймает новый гейт

backend/tests/ops/test_3467_prometheus_reload.py (test_every_single_file_mount_has_a_way_to_arrive) читает только docker-compose.metrics.yml. Файл агентов — docker-compose.metrics-agent.yml — в него не входит, и таблица «соседей по стеку» в PR #3475 этот сервис не упоминает.

Чинить

Либо расширить существующий гейт на второй compose-файл и добавить экспортёрам путь доезда (пересоздание при смене инода, как сделано для Prometheus/Loki/alert-ack), либо перевести queries.yml на маунт каталога — тогда инод перестаёт быть ловушкой.

Приёмка

Правка ops/metrics/postgres/queries.yml доезжает до всех трёх экспортёров без ручного рестарта; гейт краснеет, если для нового одиночного файлового маунта в ЛЮБОМ из двух compose-файлов метрик нет пути доезда.

Refs #3467, PR #3475, #3380/#3381 (тот же класс: bind-mount одного файла держит инод).

Найдено 12.09.2026 при ревью PR #3475 (#3467). **Разрыв латентный, не живой** — но класс ровно тот же, что уже стоил нам молчащей правки правил Prometheus. ## Факт `docker-compose.metrics-agent.yml:203, 226, 250` — на всех трёх экспортёрах Postgres: ```yaml - ./ops/metrics/postgres/queries.yml:/etc/pg-queries.yml:ro ``` Одиночный файловый маунт. `PG_EXPORTER_EXTEND_QUERY_PATH` читается процессом **при старте**, а джобы агентов в `deploy-metrics.yml` (`:524`, `:594`) пересоздают только `alloy`. Следствие: правка `ops/metrics/postgres/queries.yml` ляжет на диск, `git reset --hard` запишет **новый инод**, работающий контейнер продолжит читать старый, и деплой останется зелёным. Дословно #3467. ## Почему не горит прямо сейчас Замер 12.09: иноды хоста и контейнера совпадают (`569352`) — файл правился один раз, ещё до создания контейнеров. То есть разрыв есть по построению, но ни разу не сработал. ## Почему это не поймает новый гейт `backend/tests/ops/test_3467_prometheus_reload.py` (`test_every_single_file_mount_has_a_way_to_arrive`) читает только `docker-compose.metrics.yml`. Файл агентов — `docker-compose.metrics-agent.yml` — в него не входит, и таблица «соседей по стеку» в PR #3475 этот сервис не упоминает. ## Чинить Либо расширить существующий гейт на второй compose-файл и добавить экспортёрам путь доезда (пересоздание при смене инода, как сделано для Prometheus/Loki/alert-ack), либо перевести `queries.yml` на маунт каталога — тогда инод перестаёт быть ловушкой. ## Приёмка Правка `ops/metrics/postgres/queries.yml` доезжает до всех трёх экспортёров без ручного рестарта; гейт краснеет, если для нового одиночного файлового маунта в ЛЮБОМ из двух compose-файлов метрик нет пути доезда. Refs #3467, PR #3475, #3380/#3381 (тот же класс: bind-mount одного файла держит инод).
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#3486
No description provided.