Тревоги уровня приложения, cAdvisor и пропавшие фоновые контейнеры; critical переживает подавление #3477
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#3477
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "feat/3471-app-alerts-coverage"
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?
Пункты из #3471, раздел «Маршрутизация алертов» и «Слепые зоны мониторинга». Четыре класса отказов, которые до сих пор никто не ловил.
Чего не было
В
infra.ymlбыло 16 правил, и все они про хост, контейнеры и Postgres. Доля пятисоток и латентность продукта не покрыты ничем: ошибка видна только постфактум в GlitchTip, порога срабатывания нет, дежурного она не поднимает.Что добавлено
AppHighErrorRate— доля 5xx выше 5 процентов при осмысленном трафике,severity=critical,host=apps.AppHighLatencyP95— 95-й перцентиль выше 5 секунд, те же лейблы.Пара лейблов здесь не украшение: в
alertmanager.yml.tmplпод неё уже заведён маршрутtelegram-clients, который зовёт дежурного поимённо и напоминает каждые 30 минут. С другими лейблами алерт уехал бы в инфраструктурную тему и утонул в шуме.CadvisorDown—up{job="cadvisor"} == 0 or absent(...). Без него смерть cAdvisor молча отключала быContainerRestartLoopиContainerNearMemoryLimit.TradeInBackgroundContainerMissing— два отдельныхabsent(container_last_seen{...})наtradein-tgbotиtradein-scraper. Именно два, а не один с регуляркой: одна проверка молчала бы, пока жив хоть один из двух контейнеров.Что починено попутно
target_matchersу правила поHostAgentDownсужен доseverity="warning". Раньше умерший node-exporter уносил в тишину и алерты cAdvisor, иPostgresLongTransactionCriticalтого же хоста.upперестала резаться в Alloy. Вalloy-infra.alloykeep-фильтр пропускал толькоcontainer_*, заодно выбрасываяupиscrape_samples_scraped. Правка в обоих relabel-правилах: второе резало служебные ряды по паре имён, потому что у них нет лейблаname. Без этогоCadvisorDownне на чем было бы считать.Проверка
Имена метрик подтверждены на живом Prometheus, а не по памяти:
http_requests_totalиhttp_request_duration_seconds_bucketсуществуют с лейбламиapp=sitefinder|mera,job=app;container_last_seen{name="tradein-tgbot"}тоже на месте.promtool check rulesна итоговом файле проходит, 20 правил.Честное ограничение
TradeInBackgroundContainerMissingловит исчезновение контейнера, но не живой процесс с застрявшим циклом:container_last_seenобновляется, пока Docker видит контейнер запущенным. Подходящей метрики для второго случая в стеке сейчас нет, нужен heartbeat из самого цикла бота и скрапера. Это отдельная задача, в комментарии к правилу ограничение записано прямым текстом.- AppHighErrorRate / AppHighLatencyP95 (job="app", severity=critical, host="apps") — доля 5xx и p95 задержки по http_requests_total / http_request_duration_seconds_bucket теперь ловятся Prometheus'ом, а не только постфактум в GlitchTip. Пара critical+apps обязательна для маршрута telegram-clients в alertmanager.yml.tmpl. - Inhibit по HostAgentDown больше не гасит critical того же хоста — target_matchers сужен до severity="warning" (падение node-exporter раньше молча забирало с собой PostgresLongTransactionCritical и critical-алерты cAdvisor). - cAdvisor: keep-фильтр в alloy-infra.alloy резал у него `up` наравне с container_*-мусором — job "cadvisor" не публиковал свою же серию `up`. Пропущены up/scrape_samples_scraped, добавлен CadvisorDown. - TradeInBackgroundContainerMissing по absent(container_last_seen) на tradein-tgbot/tradein-scraper — эти контейнеры не HTTP-сервисы и в up{} не участвуют вовсе; крэш без рестарта раньше не алертился. Не закрыто: живой, но зависший процесс tgbot/scraper (container_last_seen не про внутренний прогресс, а про то, что Docker видит контейнер running). Refs #3471