Розробити чудовий, але некерований код — це як відкрити дорогий ресторан без кухні.
Твої задачі (або повідомлення в RabbitMQ) можуть блукати по чергах, натикатися на помилки і зникати в прірві логів.
Щоб цього не відбувалося, треба встановити й налаштувати систему моніторингу, яка дозволить відстежувати виконання задач, знаходити проблемні сценарії й діагностувати їхні причини.
Давай подивимось, як налаштувати моніторинг у Celery і RabbitMQ, щоб помилки не ховались, а стояли під прожектором і чекали на нашу увагу.
Використання вбудованих інструментів для моніторингу
Моніторинг у Celery
Celery надає утиліту flower, яка є веб-інтерфейсом для моніторингу виконання задач. Через flower можна відстежувати стан воркерів, черг і задач. Давай налаштуємо його крок за кроком:
- Встановлення Flower:
pip install flower - Запуск Flower:
Flower запускається як Celery-команда. Припустимо, твоє Celery-додаток називається
my_app. Запуск виглядатиме так:celery -A my_app flowerЗа замовчуванням Flower запускається на порті 5555. Відкрий у браузері http://localhost:5555, щоб побачити інтерфейс.
- Що можна побачити через Flower?
- Стан воркерів: скільки їх працює, які з них відключені.
- Черги: які задачі знаходяться в обробці.
- Задачі: як виконані, так і очікувані, включно зі статусами (успіх, помилка).
- Налаштування автентифікації:
Якщо хочеш обмежити доступ до Flower, можна налаштувати базову автентифікацію:
celery -A my_app flower --basic_auth=username:password
Моніторинг у RabbitMQ
RabbitMQ має вбудований плагін для моніторингу — RabbitMQ Management Plugin. Якщо ти ще не його вмикав, ось як це зробити:
- Активація плагіна:
rabbitmq-plugins enable rabbitmq_management - Доступ до інтерфейсу:
Плагін запускає веб-інтерфейс на порті 15672. Зайди на http://localhost:15672, щоб потрапити на панель керування RabbitMQ. Логін за замовчуванням:
guest, пароль — тежguest. - Можливості інтерфейсу:
- Перегляд стану черг: скільки повідомлень чекає на обробку.
- Відстеження з'єднань із продюсерами і консьюмерами.
- Налаштування Dead-letter Queues і інших параметрів повідомлень.
Приклади налаштування зовнішнього моніторингу помилок
Іноді веб-інтерфейсу замало для глибокого аналізу. У таких випадках можна підключити зовнішні системи моніторингу, які будуть збирати метрики й логи. Розглянемо дві популярні системи — Prometheus + Grafana та Sentry.
Моніторинг з Prometheus і Grafana
Prometheus — це система збору метрик, а Grafana — інструмент для візуалізації. Разом вони класно підходять для моніторингу Celery і RabbitMQ.
Крок 1: Експорт метрик RabbitMQRabbitMQ має готовий експортер для Prometheus. Ось як його налаштувати:
- Встановлення RabbitMQ Prometheus Exporter:
rabbitmq-plugins enable rabbitmq_prometheusПісля цього метрики будуть доступні за адресою http://localhost:15692/metrics.
- Налаштування Prometheus:
У конфігурацію Prometheus додай
jobдля RabbitMQ:scrape_configs: - job_name: 'rabbitmq' static_configs: - targets: ['localhost:15692'] - Імпорт дашборду в Grafana:
У Grafana є готові дашборди для RabbitMQ. Можеш скористатися, наприклад, RabbitMQ Overview Dashboard.
Для Celery знадобиться бібліотека celery-prometheus-exporter. Встановимо її:
pip install prometheus-client
Тепер у коді додай експортер:
from prometheus_client import start_http_server, Counter
# Запустимо експортер на порті 8000
start_http_server(8000)
# Приклад метрики для підрахунку помилок
task_errors = Counter('task_errors', 'Total number of task errors')
@app.task
def my_task():
try:
# Виконання задачі
pass
except Exception:
task_errors.inc() # Збільшуємо лічильник помилок
raise
Після цього метрики стануть доступні Prometheus, і їх можна буде візуалізувати в Grafana.
Логування й моніторинг з Sentry
Sentry — це інструмент для відстеження помилок. Він не тільки логує їх, а й дає зручний інтерфейс для аналізу. Ось як інтегрувати Sentry в проєкт:
- Встановлення Sentry:
pip install sentry-sdk - Ініціалізація Sentry:
Додай у код додатку:
import sentry_sdk from sentry_sdk.integrations.celery import CeleryIntegration sentry_sdk.init( dsn="https://<your-sentry-dsn>", integrations=[CeleryIntegration()] ) - Відстежування помилок:
Після цього всі необроблені помилки з Celery будуть відправлятися в Sentry.
- В інтерфейсі Sentry ти зможеш:
- Бачити повну інформацію про помилку, включно зі стеком викликів.
- Знаходити повторювані помилки і аналізувати їхню частоту.
- Налаштовувати сповіщення (наприклад, у Slack) при виникненні критичних помилок.
Реальні кейси використання моніторингу
- Кейс 1: "Черга впала, а воркер не помітив"
Проблема: Одній із черг RabbitMQ вичерпався ліміт повідомлень, через що продюсер продовжував додавати повідомлення в логах, але не в чергу.
Рішення: Після ввімкнення RabbitMQ Management Plugin команда оперативно помітила, що черга переповнена, і збільшила ліміти. - Кейс 2: "Задачі зависають без таймаутів"
Проблема: Задачі Celery зависали через таймаути на зовнішніх API, блокуючи чергу.
Рішення: За допомогою Prometheus додали метрику тривалості виконання задач. Завислі задачі швидко виявили і опрацювали. - Кейс 3: "А що за помилка така?"
Проблема: Розробники знайшли неясну помилку в логах Celery, але не могли її відтворити.
Рішення: Після інтеграції Sentry до задачі автоматично стали прикріплюватися стек-трейси, що дозволило швидко знайти й усунути джерело помилки.
З налаштованим моніторингом помилок у Celery і RabbitMQ ти отримуєш можливість не лише відстежувати стан задач, але й запобігати серйозним проблемам ще до їх виникнення. Успішного моніторингу!
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ