Flower
L'UI web temps réel pour superviser Celery : workers connectés, tâches en cours, échouées, débit, durée moyenne. Une seule commande, un seul port, tu vois tout ce qui passe par ton broker.
Flower n'est utile qu'avec Celery : il s'y branche en lisant les événements qu'envoient les workers, et en interrogeant le broker. Si tu n'as pas encore lu la fiche Celery, commence par là — Flower sans Celery derrière, c'est juste une UI vide.
À quoi ça sert
Une fois Celery en place, deux questions reviennent en boucle : « ma tâche est-elle passée ? », « pourquoi ça met 30 minutes à dépiler ? ». Sans UI, tu en es réduit à lire des logs de workers et à inspecter Redis/RabbitMQ à la main. Flower te donne :
- Liste des workers connectés en direct, avec leur statut, leur charge, et les queues qu'ils écoutent.
- Liste des tâches récentes, filtrables par état (succès, erreur, en cours, retry) et par nom.
- Détail d'une tâche — arguments, traceback complet en cas d'erreur, timing, worker qui l'a exécutée.
- Graphes — tâches par seconde, durée moyenne, répartition par queue.
- Actions — relancer une tâche, l'annuler, redémarrer un worker, changer la concurrence à chaud.
Flower = la fenêtre par laquelle tu regardes tes workers Celery travailler en temps réel — et où tu cliques pour comprendre ce qui a foiré.
Par défaut, Flower n'a aucune authentification : si tu l'exposes
publiquement, n'importe qui voit tes tâches (et donc potentiellement
des données sensibles dans les arguments). Mets toujours une auth
basique (--basic-auth=user:pwd) ou place-le derrière
un reverse proxy authentifié.
Un exemple d'usage
Tu as l'API + worker de la fiche Celery qui
tournent. Tu lances Flower à côté et tu ouvres
http://localhost:5555. Tu déclenches 5 fois la route
/analyze depuis ton API : tu vois apparaître en direct
5 lignes dans Flower, avec :
- le nom de la tâche (
tasks.analyze_image) ; - les arguments passés ;
- l'état (STARTED puis SUCCESS ou FAILURE) ;
- la durée d'exécution ;
- le worker qui l'a traitée.
Si l'une plante, tu cliques dessus et tu lis le traceback complet sans fouiller dans des logs. Tu peux la relancer en un clic.
How-to : démarrer avec Flower
-
Installer Flower
bashuv add flowerFlower s'appuie sur le même
tasks.pyque tes workers : il a besoin de l'objetCelerypour se connecter au broker. -
Lancer Flower
bashuv run celery -A tasks flower --port=5555Ouvre
http://localhost:5555. La page d'accueil liste les workers connectés. Si elle est vide, vérifie qu'au moins un worker tourne (cf. fiche Celery) et que Flower utilise bien la même URL de broker. -
Activer le suivi des tâches
Pour que Flower voie le détail de chaque tâche (états, durées), les workers doivent émettre les événements. Active-le au lancement :
bashcelery -A tasks worker --loglevel=info -E-Eactive--task-events. Sans ça, Flower ne voit que les workers, pas les tâches individuelles. -
Mettre une auth basique
bashcelery -A tasks flower \ --port=5555 \ --basic-auth=admin:monsecretChaque accès demandera un login HTTP basic. Pour quelque chose de plus sérieux (OAuth GitHub/Google), regarde
--auth. -
Avec docker-compose
En vrai, Flower vit à côté de l'API et du worker dans le même
docker-compose.yml. Tu réutilises la même image Python, juste la commande change :yamlservices: redis: image: redis:7 ports: ["6379:6379"] api: build: . command: uvicorn main:api --host 0.0.0.0 ports: ["8000:8000"] depends_on: [redis] worker: build: . command: celery -A tasks worker -l info -E depends_on: [redis] flower: build: . command: celery -A tasks flower --port=5555 --basic-auth=admin:monsecret ports: ["5555:5555"] depends_on: [redis, worker] -
Explorer l'UI
Onglets clés :
- Dashboard — workers connectés, statut, charge.
- Tasks — historique des tâches récentes, filtrable par état et par nom. Clic sur une ligne → détail + traceback.
- Broker — état des queues (longueur, consommateurs).
- Monitor — graphes temps réel (tâches/seconde, succès, échecs).
PersistancePar défaut, Flower garde l'historique des tâches en mémoire : un redémarrage et tout disparaît. Pour persister, ajoute
--persistent=True --db=/data/flower.dbet monte un volume sur/data.
Aide-mémoire
celery -A tasks flower
celery -A tasks flower --port=5555 --basic-auth=admin:pwd
celery -A tasks flower --persistent=True --db=/data/flower.db
celery -A tasks flower --broker=redis://other-host:6379/0
# Lister les workers
curl http://localhost:5555/api/workers
# Détail d'une tâche
curl http://localhost:5555/api/task/info/<task_id>
# Lancer une tâche depuis l'extérieur
curl -X POST http://localhost:5555/api/task/async-apply/tasks.add \
-d '{"args":[1,2]}'
Flower et le reste de l'écosystème
- Celery — le compagnon indissociable. Voir l'encart en haut de page.
- Redis / RabbitMQ — Flower lit l'état du broker (longueur des queues, consommateurs). Aucun changement côté broker.
-
Prometheus +
Grafana — Flower expose
/metricsau format Prometheus depuis la version 2.0, donc tu peux aussi tracer ses chiffres dans un dashboard Grafana à côté de tes autres services. - Docker / Kubernetes — un seul service à ajouter, qui réutilise l'image de l'app. Sur K8s, expose-le derrière une Ingress avec auth.
Pour aller plus loin
- Documentation officielle : flower.readthedocs.io
- Repo GitHub : github.com/mher/flower