Очередь задач и Redis становятся видимыми #3489

Merged
lekss361 merged 1 commit from feat/3471-celery-redis-metrics into main 2026-09-12 11:27:24 +00:00
Owner

Зачем

Очередь Celery и Redis не отдают в мониторинг ничего. Умерший воркер или растущая очередь сейчас обнаруживаются только по жалобе пользователя.

Поправка к постановке

Задача указывала на tradein-mvp/backend/app/tasks/** как на место, где живёт Celery. Celery там нет вообще: trade-in гоняет периодические функции через собственный scheduler_main. Настоящая очередь — в backend/app/workers/celery_app.py у Site Finder, брокер и backend на общем Redis.

Что внутри

  • docker-compose.metrics-agent.ymlredis-exporter и celery-exporter, профиль apps, сеть shared.
  • ops/metrics/alloy/alloy-apps.alloy — скрейп обоих, интервал 30с.
  • ops/metrics/prometheus/rules/infra.yml — группа redis-celery: RedisDown, NoActiveCeleryWorkers, CeleryQueueGrowing.

Отдельный экспортёр Celery взят вместо --check-keys у redis-exporter потому, что второй умеет только глубину очереди, а нужны ещё живые воркеры и падения задач.

Чего не проверить до деплоя

Имена метрик celery-exporter взяты из документации, живого брокера под рукой не было. В комментариях у сервиса и в правилах записано: после первого деплоя снять curl :9808/metrics и сверить.

Порог CeleryQueueGrowing — 150 при неубывающей очереди за 15 минут — предварительный. Ориентир: 44 периодические задачи в расписании, одновременный залп даёт кратно меньше. Пересмотреть после недели наблюдений.

Test plan

  • promtool check rules — SUCCESS, 23 rules found
  • после деплоя: сверить имена метрик, проверить, что celery_worker_up не пуст
  • через неделю: пересмотреть порог очереди по фактическим значениям

Refs #3471

🤖 Generated with Claude Code

https://claude.ai/code/session_01JY6iWDnGDthdvsMWgK1BMG

## Зачем Очередь Celery и Redis не отдают в мониторинг ничего. Умерший воркер или растущая очередь сейчас обнаруживаются только по жалобе пользователя. ## Поправка к постановке Задача указывала на `tradein-mvp/backend/app/tasks/**` как на место, где живёт Celery. Celery там нет вообще: trade-in гоняет периодические функции через собственный `scheduler_main`. Настоящая очередь — в `backend/app/workers/celery_app.py` у Site Finder, брокер и backend на общем Redis. ## Что внутри - `docker-compose.metrics-agent.yml` — `redis-exporter` и `celery-exporter`, профиль `apps`, сеть `shared`. - `ops/metrics/alloy/alloy-apps.alloy` — скрейп обоих, интервал 30с. - `ops/metrics/prometheus/rules/infra.yml` — группа `redis-celery`: `RedisDown`, `NoActiveCeleryWorkers`, `CeleryQueueGrowing`. Отдельный экспортёр Celery взят вместо `--check-keys` у redis-exporter потому, что второй умеет только глубину очереди, а нужны ещё живые воркеры и падения задач. ## Чего не проверить до деплоя Имена метрик celery-exporter взяты из документации, живого брокера под рукой не было. В комментариях у сервиса и в правилах записано: после первого деплоя снять `curl :9808/metrics` и сверить. Порог `CeleryQueueGrowing` — 150 при неубывающей очереди за 15 минут — предварительный. Ориентир: 44 периодические задачи в расписании, одновременный залп даёт кратно меньше. Пересмотреть после недели наблюдений. ## Test plan - [x] `promtool check rules` — SUCCESS, 23 rules found - [ ] после деплоя: сверить имена метрик, проверить, что `celery_worker_up` не пуст - [ ] через неделю: пересмотреть порог очереди по фактическим значениям Refs #3471 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01JY6iWDnGDthdvsMWgK1BMG
lekss361 added 1 commit 2026-09-12 11:21:10 +00:00
feat(ops): измеряем очередь Celery и Redis, до сих пор слепая зона
All checks were successful
CI Trade-In / changes (pull_request) Successful in 13s
CI / changes (pull_request) Successful in 15s
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 / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
62a560387c
Prometheus не видел ни одной серии celery_*/redis_* — переполнение
очереди Site Finder и залипший воркер снаружи выглядели одинаково,
тишиной (issue #3471).

Добавлено (только на продуктовом хосте, профиль apps):
- redis-exporter (oliver006/redis_exporter) — здоровье общего Redis
  (db0 celery-брокер Site Finder, db1 SearchCache trade-in, db2
  glitchtip), адрес через alias gendesign-redis на сети shared, без
  нового сетевого доступа.
- celery-exporter (danihodovic/celery-exporter) — глубина очереди,
  число живых воркеров, счётчик неуспешных задач. Выбран вместо
  redis-exporter --check-keys, потому что дефолтная очередь "celery"
  дала бы только глубину, но не воркеров и не failures.
- Скрейп обоих в alloy-apps.alloy.
- Алерты в infra.yml: RedisDown, NoActiveCeleryWorkers,
  CeleryQueueGrowing (порог 150 предварительный — реальных данных по
  глубине очереди ещё нет, пересмотр через неделю наблюдений).

Имена метрик celery-exporter (celery_queue_length, celery_worker_up,
celery_task_failed_total) — по документации проекта, без прогона на
реальном брокере; сверить после первого деплоя, см. комментарий у
сервиса. promtool check rules — 23 правила, SUCCESS.

Refs #3471
lekss361 merged commit 694bf13d3d into main 2026-09-12 11:27:24 +00:00
lekss361 deleted branch feat/3471-celery-redis-metrics 2026-09-12 11:27:25 +00:00
Sign in to join this conversation.
No reviewers
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#3489
No description provided.