Ось готовий урок, створений за твоїм майстер-промптом. Це класичний CS50-вайб: енергійно, зрозуміло і з акцентом на «чому?».
🎓 Урок: Monitoring Celery — Flower та метрики
Привіт, друзі! Радий бачити вас знову! 👋
Давайте почнемо з простого запитання. Уявіть, що ви керуєте величезною піцерією. У вас є офіціанти (це ваш веб-сервер, наприклад, Django або FastAPI), які з посмішкою приймають замовлення. І є кухня (це ваші Celery workers), де ці замовлення готуються.
Але ось у чому підступ: кухня знаходиться в бетонному бункері без вікон і дверей.
Ви передаєте замовлення через щілину в стіні (Broker: Redis або RabbitMQ). Офіціант повертається і каже клієнту: "Ваше замовлення прийнято! ID #123".
Але що відбувається всередині? * Чи готується піца? * Чи згоріла піч? * Чи кухарі влаштували страйк і грають у карти? * Чому замовлення #123 висить уже 4 години?
Без моніторингу Celery — це "чорна скринька". Ви дізнаєтесь про проблему лише тоді, коли розлючені клієнти почнуть телефонувати вам. Чи влаштовує нас такий сценарій? Звісно, ні!
Сьогодні ми "прорубаємо вікно" в цей бункер. Ми навчимося бачити все, що відбувається з вашими задачами в реальному часі, використовуючи інструмент під назвою Flower.
2. 🧠 Теоретична база (Що там під капотом?)
Щоб зрозуміти, як ми можемо стежити за Celery, треба згадати, як він спілкується.
Коли Celery працює, він не просто мовчки виконує код. Він постійно надсилає короткі повідомлення про свій стан у той самий брокер (Redis/RabbitMQ). Це називається Celery Events.
Він кричить: * 📢 "Я отримав задачу А!" * 📢 "Я почав виконувати задачу А!" * 📢 "Задача А впала з помилкою!" * 📢 "Задача А успішно завершена!"
Що таке Flower? 🌸
Flower — це веб-додаток, який підключається до того ж брокера, що і ваші воркери. Він сидить і "підслуховує" ці події, а потім малює вам красивий графічний інтерфейс (Dashboard).
🔑 Ключові поняття (Це треба знати):
- Real-time Dashboard: Ви бачите задачі прямо зараз.
- Task Inspection: Можна подивитися, які саме аргументи прийшли в функцію і що вона повернула.
- Control: Через Flower можна (іноді) зупиняти воркери або перезапускати задачі.
💡 Інтуїтивне розуміння (Як це уявити):
Уявіть, що Flower — це менеджер з планшетом, який стоїть на кухні. Він не готує піцу, але він відмічає: "Ага, Маріо взяв замовлення. Ага, Луїджі впустив тісто. О, піч перегрілася". І показує вам звіт на екрані.
3. 🧪 Приклади (Let's get our hands dirty)
Приклад 1: Запуск Flower (The "Hello World" of Monitoring)
Припустимо, у вас вже є проєкт на Celery. Як нам побачити магію?
Спочатку встановимо його:
pip install flower
Тепер, якщо ваша Celery-аплікація називається my_project, ми запускаємо Flower однією командою.
❓ Питання до вас: Як ви думаєте, чи потрібно зупиняти основний сервер або воркери, щоб запустити Flower? (Пауза для роздумів...) Відповідь: Ні! Flower — це окремий спостерігач. Він підключається паралельно.
# Запускаємо в терміналі
celery -A my_project flower --port=5555
Тепер відкриваємо браузер за адресою http://localhost:5555.
💥 Бум! Ви бачите список активних воркерів. Якщо вони "Online" — це зелений колір. Якщо воркер впав — ви одразу побачите це тут.
Приклад 2: Дебаг помилки (Реальна користь)
Уявіть задачу, яка ділить число на нуль.
# tasks.py
@app.task
def risky_task(x):
return 100 / x
Ви викликаєте risky_task.delay(0). У вашому коді нічого не сталося, просто задача пішла в чергу. Але в Flower ви побачите:
- У вкладці Tasks з'явився новий рядок.
- Статус: FAILURE (червоним кольором 🔴).
- Натискаємо на задачу і бачимо Traceback (опис помилки) прямо в браузері!
Чому це круто? Вам не треба лізти в гігантські лог-файли на сервері через SSH і грепати текст. Ви бачите помилку миттєво в UI.
Приклад 3: Метрики для Prometheus (Рівень PRO)
Flower — це чудово для "подивитися очима зараз". Але що, якщо ви хочете знати, як працювала система минулого вівторка вночі? Flower не зберігає історію вічно (зазвичай він тримає її в оперативній пам'яті).
Тут на сцену виходить Prometheus. Flower вміє віддавати сухі цифри для нього.
Якщо ви зайдете на http://localhost:5555/metrics, ви побачите щось таке:
# HELP celery_tasks_total Total number of tasks
# TYPE celery_tasks_total counter
celery_tasks_total{state="STARTED"} 15.0
celery_tasks_total{state="SUCCESS"} 12.0
celery_tasks_total{state="FAILURE"} 3.0
Це не для людей. Це їжа для Prometheus, який змалює вам красиві графіки в Grafana: "Швидкість обробки задач за місяць".
4. 🛠 Практична частина
Час закотити рукави! Ось ваші завдання.
🔹 Завдання 1: "Перший погляд"
Встановіть Flower у вашому тестовому проєкті. Запустіть його. Зайдіть на localhost:5555. Знайдіть вкладку "Workers". Скільки їх там? Що буде, якщо ви натиснете Ctrl+C у терміналі, де запущено воркер? Спостерігайте за реакцією Flower.
🔹 Завдання 2: "Детектив"
Створіть задачу, яка "спить" 30 секунд (time.sleep(30)). Запустіть її 5 разів поспіль.
Зайдіть у Flower на вкладку Monitor. Подивіться на графіки. Ви бачите ріст черги? Знайдіть ці задачі у списку і подивіться їхній статус (має бути STARTED або RECEIVED).
🔹 Завдання 3: "Remote Control"
Знайдіть у Flower кнопку або опцію Rate Limit для вашого воркера. Спробуйте змінити ліміт виконання задач прямо через інтерфейс (наприклад, 1 задача на хвилину). Чи спрацювало це? (Це показує, що Flower — це не тільки "телевізор", а й "пульт").
🔹 Завдання 4: Міні-кейс "Безпека" 🚨
Уявіть, що ви виклали Flower у відкритий інтернет на порту 5555 без пароля.
Питання: Що може зробити зловмисник, маючи доступ до кнопки "Revoke" (скасувати задачу) або бачачи аргументи задач (де можуть бути email-адреси користувачів)?
Дія: Загугліть, як увімкнути basic_auth для Flower і запустіть його з логіном і паролем.
5. 💡 Мислення як у розробника
Давайте поговоримо про те, де новачки набивають гулі, а сеньйори лише посміхаються.
❌ Помилка новачка: "Flower замість бази даних"
Новачки часто думають: "О, Flower показує історію задач! Мені не треба зберігати результати в своїй БД!". Реальність: Flower перезапуститься — і вся історія зникне (якщо не налаштована персистентність, яка теж має ліміти). Flower — це монітор, а не архів.
❌ Помилка новачка: "Flower у продакшені без захисту"
Я бачив десятки проєктів, де дашборд висів відкритим. Це величезна діра в безпеці. Дані ваших клієнтів можуть "світитися" в аргументах функцій. Як думає профі: "Flower у продакшені має бути за VPN або хоча б за Basic Auth (логін/пароль). Аргументи задач із чутливими даними (паролі, токени) я буду приховувати або не передавати напряму в Celery."
🧠 Порада від сеньйора:
Використовуйте Flower для оперативного реагування (щось зламалося прямо зараз). Використовуйте Prometheus + Grafana для аналітики (чи стали ми повільнішими за останні пів року?).
6. 🧩 Підсумок
Отже, що ми сьогодні зробили? 1. Ми зрозуміли, що Celery без моніторингу — це "кухня в бункері". 2. Ми встановили Flower і побачили наші воркери та задачі візуально. 3. Ми навчилися бачити помилки (Traceback) без копирсання в логах. 4. Ми зрозуміли різницю між Flower (live view) та Prometheus (long-term metrics).
Тепер ви не сліпі кошенята. Ви — інженери, які контролюють ситуацію!
🔜 Що далі? Тепер, коли ми бачимо, як задачі виконуються, виникає питання: а як зробити так, щоб задача запускалася сама щоранку о 9:00? Про це ми поговоримо на наступному уроці: Celery Beat та періодичні задачі.
А поки — запустіть Flower і подивіться, як пульсує серце вашого проєкту! 🚀
Generated with ❤️ via CS50-style prompt.