- 可观测性
- 运维
- 后端
【免费下载链接】flower
Real-time monitor and web admin for Celery distributed task queue
Flower 是 Celery 生态中用于实时监控与 Web 管理的开源工具。本指南围绕仓库中的 docs/install.rst 展开,介绍 Flower 的 pip 安装、开发版安装,以及通过celery flower子命令、Docker 镜像两种方式启动监控服务的完整流程。读者读完可独立完成 Flower 的部署,并掌握端口修改、Celery 应用加载、Broker 连接等核心启动参数的用法。
安装 Flower
使用 pip 安装稳定版
Flower 以标准 Python 包的形式发布在 PyPI 上,安装非常简单:
$ pip install flowerFlower 支持 Python 3.7 及以上版本(见 setup.py 中的python_requires=">=3.7"),其运行依赖如下(见 requirements/default.txt):
celery>=5.0.5:Flower 作为 Celery 的子命令运行,依赖 Celery 提供的应用对象、事件系统与远程控制接口;tornado>=5.0.0,<7.0.0:Flower 的 HTTP 服务器基于 Tornado 异步框架实现;prometheus_client>=0.8.0:用于对外暴露 Prometheus 监控指标;humanize、pytz:用于时间的人性化显示与时区处理。
安装完成后,Flower 会通过setup.py中声明的entry_points(celery.commands→flower.command:flower)自动注册为 Celery 的一个子命令,这也是下文所有celery ... flower命令能够生效的底层机制。
安装开发版
如果需要体验最新功能或参与开发,可以直接从 GitHub 主分支安装:
$ pip install https://github.com/mher/flower/zipball/master#egg=flower该命令会将 master 分支的最新代码打包安装,适合在正式发布前尝鲜或复现最新问题。
启动 Flower
Flower 不能单独运行,它必须绑定到一个 Celery 应用,因此启动命令统一采用celery ... flower的形式。其入口实现在 flower/main.py,核心逻辑位于 flower/command.py。
方式一:通过 broker URL 直接启动
最简单的启动方式是指定 broker 地址,Flower 会自动据此创建 Celery 应用:
$ celery --broker=amqp://guest:guest@localhost:5672// flower其中amqp://guest:guest@localhost:5672//是 RabbitMQ 的默认连接 URL。除了 RabbitMQ,Celery 支持的任意 broker(如redis://localhost:6379/0)都可以这样直接传入。
方式二:复用已配置的 Celery 应用
在实际项目中,Celery 应用通常已经在一个 Python 模块中完成配置(包括 broker、backend、序列化策略、路由规则等)。此时更推荐让 Flower 直接加载该应用:
$ celery -A tasks.app flower-A tasks.app指示 Celery 加载tasks模块中的app实例。仓库的 examples/tasks.py 提供了一个可直接运行的示例应用:
import os from celery import Celery app = Celery("tasks", broker=os.environ.get('CELERY_BROKER_URL', 'redis://'), backend=os.environ.get('CELERY_RESULT_BACKEND', 'redis')) app.conf.accept_content = ['pickle', 'json', 'msgpack', 'yaml'] app.conf.worker_send_task_events = True该应用定义了add、sleep、echo、error四个任务,并开启了worker_send_task_events——这保证 worker 会向事件流发送任务事件,是 Flower 实时展示任务进度与历史的前提。
启动时注意:Celery 参数(如--broker、-A)必须放在celery命令之后、flower子命令之前;Flower 自身的参数放在flower之后。flower/command.py 中的warn_about_celery_args_used_in_flower_command会检测你把 Celery 参数误放在flower之后的情况,并给出修正提示。
修改监听端口
默认情况下 Flower 运行在 5555 端口(该默认值定义于 flower/options.py 的define("port", default=5555, ...),与 Dockerfile 中的EXPOSE 5555一致)。通过--port选项即可修改:
$ celery -A tasks.app flower --port=5001启动成功后,日志会打印形如Visit me at http://0.0.0.0:5555的访问地址(见 flower/command.py 的print_banner),同时会列出当前 Broker 连接 URI 与所有已注册任务。
使用 Docker 运行 Flower
仓库提供现成的 Docker 镜像与编排配置,适合快速拉起一整套演示环境。
直接使用官方镜像
$ docker run -v examples:/data -p 5555:5555 mher/flower celery --app=tasks.app flower该命令的含义:
-v examples:/data:将本地的examples目录挂载到容器的/data(容器内PYTHONPATH即指向/data,见 Dockerfile),使容器中的 Python 能导入 examples/tasks.py;-p 5555:5555:将容器的 5555 端口映射到宿主机,供浏览器访问;celery --app=tasks.app flower:即上文介绍的标准启动命令,加载容器内tasks.app。
使用 docker-compose 一键拉起完整环境
仓库根目录的 docker-compose.yml 定义了一套完整的 Celery + Flower 演示环境,包含redis(Broker)、worker(运行celery -A tasks worker -l info -E)、flower(运行celery -A tasks flower)以及可选的prometheus/grafana监控组件:
$ docker-compose up其中flower服务通过CELERY_BROKER_URL: redis://redis连接同一网络内的 Redis,并通过depends_on保证 worker 先于 Flower 启动。访问http://localhost:5555即可看到 Worker 与任务列表。
常见启动配置一览
除--port外,Flower 在 flower/options.py 中还注册了大量可通过命令行传入的启动参数,以下是启动阶段最常用的几个(完整说明见 docs/config.rst):
| 参数 | 默认值 | 说明 |
|---|---|---|
--address | ''(全部网卡) | 指定 HTTP 服务监听地址,如--address=0.0.0.0或--address=localhost |
--unix-socket | '' | 改用 UNIX socket 监听,如--unix-socket=/var/run/flower.sock,此时不再占用 TCP 端口 |
--conf | flowerconfig.py | 指定额外配置文件路径,如--conf="./examples/celeryconfig.py" |
--debug | False | 开启调试模式,输出更详细的日志(注意可能打印敏感信息) |
--inspect_timeout | 1000 | worker 远程检查命令的超时时间,单位毫秒 |
--enable_events | True | 周期性向 worker 发送 Celeryenable_events命令以接收实时任务事件 |
--max_workers/--max_tasks | 5000/100000 | 内存中保留的 worker / 任务数量上限 |
--persistent | False | 开启持久化模式,配合--db指定状态数据库文件,重启后恢复状态 |
--read_only | False | 只读模式,禁用 UI 与 API 中所有控制操作 |
这些参数除了命令行,还可以写入flowerconfig.py配置文件,或通过FLOWER_前缀的环境变量(如export FLOWER_BASIC_AUTH=foo:bar)传入。flower/command.py 的apply_env_options、apply_options分别负责解析这两类来源,且命令行参数的优先级最高,会覆盖配置文件的同名设置。
源码视角:启动链路是如何工作的
理解 Flower 的启动链路有助于排查部署问题。以celery -A tasks.app flower --port=5001为例,完整流程如下:
- Celery CLI 通过 setup.py 声明的
entry_points找到flower.command:flower,将剩余参数(--port=5001)以tornado_argv形式传入; - flower/command.py 的
flower()依次调用apply_env_options()(解析FLOWER_*环境变量)与apply_options()(先解析命令行拿到--conf,再解析配置文件,最后再次解析命令行确保命令行参数优先); extract_settings()汇总调试开关、cookie 密钥、URL 前缀、OAuth 配置与 SSL 证书等设置;- 构造 flower/app.py 中的
Flower应用对象,内部创建Events(消费 Celery 事件流)与Inspector(执行 worker 远程检查); flower_app.start()启动事件循环,监听--port指定的端口并开启服务。
其中Events的初始化会读取db、persistent、state_save_interval、enable_events、max_workers、max_tasks等参数,这就是上述“常见启动配置”中相关参数影响行为的地方。相应启动流程在 tests/unit/test_command.py 中有配套单测,例如test_port验证--port=123会被正确解析并写入options.port,可作为参数解析行为的参考依据。
总结
本文覆盖了 Flower 从安装到启动的完整路径:pip install flower安装稳定版(或从 master 安装开发版);通过celery --broker=... flower或celery -A tasks.app flower两种方式启动;用--port调整监听端口;用 Docker 镜像或 docker-compose.yml 快速部署整套环境。结合 flower/options.py、flower/command.py 与 flower/app.py 的源码,可以清楚理解参数解析与端口绑定的底层实现。更多进阶配置(认证、持久化、Prometheus 集成等)可继续阅读仓库的 docs/config.rst 与 docs/prometheus-integration.rst。
- 可观测性
- 运维
- 后端
【免费下载链接】flower
Real-time monitor and web admin for Celery distributed task queue
相关推荐
Cortex项目代码结构解析:从app.py到utils.py的核心模块详解
Cortex项目代码结构解析:从app.py到utils.py的核心模块详解 Cortex是一个专注于从零构建大模型的开源项目,提供了从预训练到RLHF(基于人
终极免费方案:Adobe Downloader macOS版完整使用指南
终极免费方案:Adobe Downloader macOS版完整使用指南 Adobe Downloader是专为macOS用户设计的开源工具,能够直接下载Ado
桌面应用下载工具Flower终极指南:掌握Celery分布式任务队列的可视化监控利器
Flower终极指南:掌握Celery分布式任务队列的可视化监控利器 想要实时监控Celery分布式任务队列的运行状态吗?Flower作为专业的Celery监控
可观测性运维后端
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考