fix(ops/metrics): правки конфига Alertmanager молча не доезжали до контейнера #3142
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
ИРД
вторичка
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#3142
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/3xxx-alertmanager-stale-inode"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Пойман на проде 27.08 сразу после мержа #3136 — при проверке, что кнопка «Принял в работу» действительно встала в маршрут.
Симптом
На диске лежал новый конфиг,
amtool check-configего одобрил, деплой зелёный. А контейнер продолжал слать алерты напрямую в Telegram:Причина
Конфиг подключён бинд-маунтом файла, а рендер в деплое делает
rmи создаёт файл заново. Иначе никак: послеchownфайл принадлежит65534с правами600, а каталог — деплой-пользователю, поэтому пересоздать он может, а перезаписать — нет.rm+ создание даёт новый инод. Открытый дескриптор внутри работающего контейнера продолжает смотреть на прежний, уже удалённый.up -dконтейнер при этом не трогает: он сравнивает описание сервиса, а содержимое бинд-маунта в сравнение не входит.Отказ полностью беззвучный — ни одного красного признака ни в деплое, ни в проверке конфига, ни в состоянии контейнера. Значит и все прежние правки маршрутизации применялись лишь тогда, когда контейнер пересоздавался по какой-то другой причине.
Перезагрузка по SIGHUP/API не лечит: она перечитывает тот же самый открытый инод. Лечит только пересоздание контейнера.
Правка
Флаг
ALERTMANAGER_RERENDERED=1и пересоздание послеup -d.Два свойства, которые я счёл обязательными и закрепил тестами:
Пересоздание закрыто проверкой флага. Безусловное рвало бы доставку алертов на каждом деплое метрик, включая те, где конфиг не менялся.
Флаг выставляется ПОСЛЕ
amtool check-config, а не до. При обратном порядке битый конфиг пересоздавал бы живой контейнер и ронял алертинг целиком — вместо того, чтобы оставить работать прежний. Это ровно тот случай, когда «починка» опаснее болезни, поэтому порядок проверяется отдельным тестом.Прод уже приведён в соответствие
Контейнер пересоздал вручную, проверил после:
gendesign-alert-ack—Up, healthy,/healthzотдаёт 200. Маршрут клиентских инцидентов теперь действительно идёт через кнопку. Эта правка нужна, чтобы следующая правка конфига доехала сама.Проверка
Refs #3078, #3136