gendesign/.forgejo/workflows
bot-backend 251ca98c5c
All checks were successful
CI Trade-In / changes (pull_request) Successful in 10s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / changes (pull_request) Successful in 13s
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Successful in 2m37s
CI / backend-tests (pull_request) Successful in 7m8s
fix(metrics): экспортёр Celery поднимается, тревоги про воркеров и память говорят правду (#3493)
Две тревоги шумели в канале каждую ночь и каждые три часа, обе врали текстом.

NoActiveCeleryWorkers горела с 12.09 без перерыва при живом воркере
(`Up 29 hours`, 15 задач за 10 минут). Экспортёр не поднимался ни разу:
тега danihodovic/celery-exporter:0.13.0 на Docker Hub не существует
(`pull` → `not found`, логи джобы agent-apps 12.09 и 16.09), а под
`set -e` упавший pull обрывал ВСЮ джобу — с 12.09 на Poincare не доезжало
ничего из агента метрик: ни этот экспортёр, ни redis-exporter, ни новый
конфиг Alloy. Второй дефект за первым: флага `--queue` в 0.12.2 нет,
опция зовётся `--queues` — с одним исправленным тегом экспортёр упал бы
при старте. Тег и флаг сверены с исходником (src/cli.py, src/exporter.py)
и пробой на боевом брокере: временный контейнер 0.12.2 отдал
`celery_worker_up{hostname="687f9212bebb"} 1.0`. Адрес брокера не тронут —
алиас `gendesign-redis` на сети gendesign_shared существует и резолвится.

Правило разделено на две новости. NoActiveCeleryWorkers — только когда
экспортёр жив, а воркеров нет. QueueExporterDown (warning) — когда не
отвечает сам экспортёр, с текстом «авария наблюдаемости, не продукта».
Заодно прежняя ветка `count(celery_worker_up == 1) == 0` не сработала бы
никогда: count() от пустого вектора пуст, мёртвый воркер она пропускала.

ContainerNearMemoryLimit на tradein-postgres: working_set включает активный
кэш страниц, ночные сканы поднимают его к потолку. Анонимная память за
неделю 11–170 МБ из 3 ГБ, oom_kill = 0 за 21 сутки — «дальше OOM-kill» был
ложью. Добавлено второе условие: анонимная память > 50 % лимита.
Калибровка ЭТИМ выражением по 14 суткам истории: tradein-postgres 5 → 0
эпизодов, tradein-browser 2 → 2 (06.09 и 12.09, rss до 95 % — настоящие).

Юнит-тесты правил (ops/metrics/prometheus/tests/infra_test.yml, 6 случаев,
каждый уже случался на проде) исполняются деплоем перед reload. На старых
правилах promtool test rules → rc=1 (6 расхождений), на новых → rc=0.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 11:22:15 +05:00
..
ci-tradein.yml chore(ci): node 20 отслужил — рантайм фронтов и оба CI-джоба на node 24 LTS 2026-08-29 14:02:55 +03:00
ci.yml fix(deploy): сверка маунтов Caddy не может провалиться втихую (#3443, ревью) 2026-09-12 20:49:34 +05:00
deploy-drift.yml feat(ops): сторож расхождения «прод ↔ main» — молчаливый недоехавший деплой становится видимым (#3029) 2026-08-27 12:35:43 +03:00
deploy-infra.yml feat(ops): у волта Obsidian появился автоматический бэкап (#3090) 2026-08-25 05:44:16 +00:00
deploy-metrics.yml fix(metrics): экспортёр Celery поднимается, тревоги про воркеров и память говорят правду (#3493) 2026-09-17 11:22:15 +05:00
deploy-obsidian.yml fix(ci): стек CouchDB после переезда остаётся на своём хосте (#3087) 2026-08-24 17:58:56 +00:00
deploy-tradein.yml Метрика на корпоративном аккаунте и подтверждение прав в Яндекс.Вебмастере (#3530) 2026-09-15 16:48:57 +00:00
deploy.yml fix(deploy): Caddy пересоздаётся только когда правка иначе не доедет (#3443) 2026-09-12 19:38:48 +05:00
perimeter-smoke.yml fix(smoke): отказ TLS-сертификата — это FAIL, а не «ответа нет» 2026-09-12 01:07:11 +05:00
stale-claims.yml fix(stale-claims): avoid SIGPIPE 141 — pass file path не pipe 2026-05-28 01:05:56 +03:00