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
    Можна стежити за тим, як відправляються повідомлення через exchange-и. Це допомагає виявити вузькі місця в маршрутизації даних.
  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

Ось і весь наш простий, але дуже корисний приклад!


Тепер ви озброєні інструментами для моніторингу продуктивності, тож можете впевнено підтримувати свої черги і воркерів у нормі. А решта — справа техніки.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ