Ласкаво просимо на чергову порцію знань про паралельну обробку задач і керування чергами! На сьогодні наша мета проста: навчитися ефективно стежити за продуктивністю двох ключових елементів нашого асинхронного світу — Celery і RabbitMQ. Адже, як кажуть, "качка може плавати, але дрібний моніторинг потопить навіть найбільшого крокодила". Тож занурюємося в світ моніторингу!
Моніторинг продуктивності — це не просто модне слово для звітів. Він дозволяє:
- Розуміти поточний стан системи та її компонентів.
- Виявляти вузькі місця в обробці задач.
- Запобігати незапланованим простоям і блокуванням.
- Підвищувати продуктивність (а отже, і задоволення користувачів).
- Оптимізувати ресурси, щоб воркери не тинялися без діла.
Моніторинг Celery: стартуємо з Flower
Щоб відстежувати стан Celery, крута команда розробників придумала інструмент з квітковою назвою — Flower. Це зручний веб-інтерфейс, який дозволяє моніторити задачі, стан воркерів та багато іншого.
Спочатку додамо Flower у наш проєкт. Установка проста, як і все хороше в Python:
pip install flower
Після інсталяції запускаємо Flower для нашого проєкту:
celery -A your_project_name flower
Тепер Flower запускається на стандартному порті 5555. Відкриваємо браузер і йдемо за адресою http://localhost:5555. Якщо бачите інтерфейс із квіточками — вітаю, ви зробили перший крок до моніторингу.
Що можна побачити у Flower
- Стан воркерів
Ви можете бачити список всіх ваших воркерів, їхній статус (доступний/недоступний), а також завантаженість. Це корисно, щоб зрозуміти, чи не перевантажений якийсь один воркер, поки інші ліниво дрімають. - Поточні задачі
Flower показує список задач, які зараз обробляються, та їхній статус:SUCCESS,FAILURE,PENDING. - Історія задач
Можна відслідковувати, які задачі виконувалися раніше, побачити їхні параметри та результати виконання. - Черги
Ви зможете побачити, скільки задач зараз очікує в кожній із черг.
Моніторинг 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
- Кількість повідомлень у чергах
Ви бачите, скільки задач зараз "зависло" в різних чергах. Якщо число постійно зростає, значить система не встигає обробляти вхідні задачі. - Пропускна здатність (Throughput)
Це число показує, скільки повідомлень передається і обробляється за секунду. Корисно, щоб зрозуміти, наскільки завантажена система. - Стан Exchanges
Можна стежити за тим, як відправляються повідомлення через exchange-и. Це допомагає виявити вузькі місця в маршрутизації даних. - Споживання ресурсів
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.
- Встановіть Flower і налаштуйте його запуск.
- Активуйте RabbitMQ Management Plugin.
- Спостерігайте за воркерами, чергами і задачами в реальному часі.
- Створіть тестові задачі, щоб перевірити, як вони проходять по системі.
- Налаштуйте логування в Celery і RabbitMQ, щоб фіксувати помилки та події.
Нарешті, протестуйте вашу систему під навантаженням. Запустіть велику кількість задач і подивіться, як вона поводиться, де виникають затримки і які метрики найважливіші.
# Тестова задача для Celery
@app.task
def add(x, y):
return x + y
Ось і весь наш простий, але дуже корисний приклад!
Тепер ви озброєні інструментами для моніторингу продуктивності, тож можете впевнено підтримувати свої черги і воркерів у нормі. А решта — справа техніки.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ