JavaRush /Курсы /Модуль 4: FastAPI /Мониторинг производительности Celery и RabbitMQ

Мониторинг производительности Celery и RabbitMQ

Модуль 4: FastAPI
14 уровень , 8 лекция
Открыта

Добро пожаловать на очередную порцию знаний по параллельной обработке задач и управлению очередями! На сегодня наша цель весьма проста: научиться эффективно следить за производительностью двух ключевых элементов нашего асинхронного мира — Celery и RabbitMQ. Ведь, как говорится, "утка может плавать, но мелкий мониторинг утопит даже самого большого крокодила". Так что ныряем в мир мониторинга!

Мониторинг производительности — это не просто модное слово для отчётов. Он позволяет:

  • Понимать текущее состояние системы и её компонентов.
  • Выявлять узкие места в обработке задач.
  • Предотвращать незапланированные простои и блокировки.
  • Увеличивать производительность (а значит, и удовлетворение пользователей).
  • Оптимизировать ресурсы, чтобы воркеры не занимались "простаиванием".

Мониторинг Celery: стартуем с Flower

Чтобы отслеживать состояние Celery, замечательная команда разработчиков придумала инструмент с цветочным названием — Flower. Это удобный веб-интерфейс, который позволяет мониторить задачи, состояние воркеров и многое другое.

Первым делом добавим Flower в наш проект. Установка проста, как и всё хорошее в Python:


pip install flower

После установки запускаем Flower для нашего проекта:


celery -A your_project_name flower

Теперь Flower запускается на стандартном порту 5555. Открываем браузер и идём по адресу http://localhost:5555. Если видим интерфейс с цветочками — поздравляю, вы сделали первый шаг к мониторингу.

Что можно увидеть в Flower

  1. Состояние воркеров
    Вы можете видеть список всех ваших воркеров, их статус (доступен/недоступен), а также загруженность. Это полезно для понимания, не перегружен ли один из воркеров, в то время как другие лениво дремлют.
  2. Текущие задачи
    Flower показывает список задач, которые в данный момент обрабатываются, и их статус: SUCCESS, FAILURE, PENDING.
  3. История задач
    Можно отслеживать, какие задачи выполнялись ранее, увидеть их параметры и результаты выполнения.
  4. Очереди
    Вы сможете увидеть, сколько задач сейчас находится в ожидании в каждой из очередей.

Мониторинг RabbitMQ: пусть кролик не ускользнет

RabbitMQ — наш центральный механизм передачи задач, поэтому игнорировать его состояние мы не можем. У него есть родной инструмент мониторинга — RabbitMQ Management Plugin.

Включение RabbitMQ Management Plugin

Если вы установили RabbitMQ стандартным способом, то Management Plugin уже должен быть доступен. Просто активируйте его следующей командой:


rabbitmq-plugins enable rabbitmq_management

После этого веб-панель мониторинга RabbitMQ будет доступна по адресу http://localhost:15672. Логин и пароль по умолчанию — guest / guest. Советуем сразу же заменить их на более безопасные.

Что можно мониторить через RabbitMQ Management Plugin

  1. Количество сообщений в очередях
    Вы видите, сколько задач сейчас "зависло" в различных очередях. Если число постоянно растёт, значит система не успевает обрабатывать входящие задачи.
  2. Пропускная способность (Throughput)
    Это число показывает, сколько сообщений передаётся и обрабатывается за секунду. Полезно для понимания, насколько сильно загружена система.
  3. Состояние обменников (Exchanges)
    Вы можете следить за тем, как отправляются сообщения через обменники. Это помогает выявить "узкие места" в маршрутизации данных.
  4. Потребление ресурсов
    RabbitMQ предоставляет полезную информацию о том, сколько памяти, процессорного времени и дискового пространства потребляется.

Интеграция мониторинга через Grafana и Prometheus

Если вы хотите серьёзно заморочиться и построить схему мониторинга уровня "Enterprise-Ready", вам пригодится связка Prometheus и Grafana. Она позволяет собирать метрики из RabbitMQ и Celery, а затем строить красивейшие графики.

Установка Prometheus

Prometheus — это "коллектор" метрик, который собирает данные из различных источников (RabbitMQ, Celery) и сохраняет их для последующего анализа. Для начала установим Prometheus через Docker:


docker run -d --name=prometheus -p 9090:9090 prom/prometheus

Настроим Prometheus для сбора метрик RabbitMQ. В конфигурационный файл prometheus.yml добавляем следующий блок:


scrape_configs:
  - job_name: 'rabbitmq'
    static_configs:
      - targets: ['localhost:15692']

Порт 15692 используется для экспорта метрик RabbitMQ (не путать с основным портом для мониторинга).

RabbitMQ и метрики Prometheus

Чтобы RabbitMQ начал экспортировать метрики в Prometheus, нужно установить дополнительный плагин:


rabbitmq-plugins enable rabbitmq_prometheus

Визуализация через Grafana

Grafana — это инструмент для отображения метрик в виде графиков, диаграмм и дашбордов. Установим Grafana через Docker:


docker run -d --name=grafana -p 3000:3000 grafana/grafana

После запуска Grafana открывайте http://localhost:3000 и подключайте ваш Prometheus как источник данных. У Grafana есть готовые дашборды для RabbitMQ, так что даже собирать ничего не придётся.


Логирование задач и ошибок

Один из ключевых аспектов мониторинга — это логирование. Без логов вы не сможете понять, что пошло не так в случае сбоя.

Celery может писать логи о выполнении задач. В celeryconfig.py укажите путь до файлов логов:


from kombu import Exchange, Queue

broker_url = 'pyamqp://guest@localhost//'

# Логирование
task_default_queue = 'default'
task_default_exchange = 'default'
task_default_routing_key = 'default'
worker_log_format = '[%(asctime)s: %(levelname)s/%(processName)s] %(message)s'

# Настройка логов
worker_redirect_stdouts_level = 'INFO'

Теперь все события и ошибки будут записываться — это спасёт вас при отладке.

RabbitMQ автоматически пишет свои логи. Однако их можно перенаправить в стороннюю систему, например ELK Stack. Это позволит строить поисковые запросы и графики прямо по логам.


Практический пример: настройка мониторинга для Celery и RabbitMQ

Давайте настроим простую систему мониторинга на основе Flower и RabbitMQ Management Plugin.

  1. Установите Flower и настройте его запуск.
  2. Активируйте RabbitMQ Management Plugin.
  3. Наблюдайте за воркерами, очередями и задачами в реальном времени.
  4. Создайте тестовые задачи, чтобы проверить, как они проходят по системе.
  5. Настройте логирование в Celery и RabbitMQ, чтобы фиксировать ошибки и события.

Наконец, протестируйте вашу систему под нагрузкой. Запустите множество задач и посмотрите, как она себя ведёт, где возникают задержки и какие метрики наиболее важны.


# Тестовая задача для Celery
@app.task
def add(x, y):
    return x + y

Вот и весь наш простой, но весьма полезный пример!


Теперь вы оснащены инструментами для мониторинга производительности, так что можете уверенно поддерживать свои очереди и воркеров в норме. А остальное — дело техники.

1
Задача
Модуль 4: FastAPI, 14 уровень, 8 лекция
Недоступна
Установка и запуск Flower для мониторинга Celery задач
Установка и запуск Flower для мониторинга Celery задач
1
Задача
Модуль 4: FastAPI, 14 уровень, 8 лекция
Недоступна
Интеграция RabbitMQ и Prometheus для мониторинга метрик
Интеграция RabbitMQ и Prometheus для мониторинга метрик
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ