Flower 是一个基于 Web 的监控和管理 Celery 的工具,目前仍在活跃的开发当中且是一个很重要的工具了。这是推荐使用的 Celery 监控工具,在快速的开发和变化之中, 你也可以得到相对稳定的版本。
1. 特性
我能帮你干什么事情?
- 用 Celery 事件实时监控
- 任务进程和历史
- 能够显示任务的详细信息(arguments/start time/runtime等)
- 图形化和统计
- 远程控制
- 查看worker状态和统计
- 关闭和重启worker实例
- 控制进程池大小/平滑配置(autoscale settings)
- 查看和修改一个worker实例消费的队列
- 查看当前正在运行的tasks
- 查看计划任务(ETA(估计到达的时间)/倒计时)
- 应用时间和速率限制
- 配置浏览器(Configuration viewer)
- 撤销或终止任务
- Broker monitoring(中间人监控)
- 查看所有Celery队列的统计
- 队列长度图
- HTTP API
- 可以通过 API 对 Celery 进行操作
- 登录认证
- Basic Auth
- GitHub OAuth2
- Google OpenID authentication
2. 安装
安装很简单,只需要一行命令即可。
# pip $ pip install flower
3. 配置
配置方式有多个选项需要更加实际情况使用
- [1] 可以从命令行配置 Flower
# 通过命令行参数配置 $ flower --auto_refresh=False $ flower -A proj --broker=amqp://guest:[email protected]:5672// $ flower -A proj --broker_api=http://user:[email protected]:15672/api/
- [2] 通过 flowerconfig.py 配置文件
# RabbitMQ management api broker_api = 'http://guest:[email protected]:15672/api/' # Enable debug logging logging = 'DEBUG'
# 或者可以使用环境变量 # 所有的flower选项应该以`FLOWER_`为前缀 $ export FLOWER_BASIC_AUTH=foo:bar # 命令行传参优先于配置文件中定义的选项 # 可以使用conf选项更改配置文件的名称和路径 $ flower --conf=celeryconfig.py
4. 用法
配置好之后,使用起来就比较简单了。
# [方式一] 运行服务打开本地http://localhost:5555: $ flower --port=5555 $ flower -A proj --port=5555 # [方式二] Celery运行 $ celery flower -A proj --address=127.0.0.1 --port=5555 # [方式三] BrokerURL和其他配置选项能够通过一个标准的Celery选项 $ celery flower -A proj --broker=amqp://guest:[email protected]:5672// $ celery flower --broker=redis://:[email protected]:6379/0 # [方式四] 使用unix的socket文件 $ flower --unix_socket=/tmp/flower.sock
5. 认证
如果你运行在一个不被信任的环境中则需要认证
- HTTP Basic Authentication
# Flower使用基于BasicAuthentication的认证方式是很容易的 # 通过--basic_auth参数指定用户名和密码就可以了,可指定多个 # 之后,任何试图访问Flower实例的客户端都将会提示需要输入口令 $ celery flower --basic_auth=user1:password1,user2:password2
- Google OAuth 2.0
# 通过任何一个google账号进行认证 $ celery flower --auth="[email protected]|[email protected]" --oauth2_key=... --oauth2_secret=... --oauth2_redirect_uri=http://flower.example.com/login # 环境变量配置 $ export FLOWER_OAUTH2_KEY=... $ export FLOWER_OAUTH2_SECRET=... $ export FLOWER_OAUTH2_REDIRECT_URI=http://flower.example.com/login $ celery flower --auth=.*@example.com
- GitHub OAuth
# 配置方式 $ export FLOWER_OAUTH2_KEY=7956724aafbf5e1a93ac $ export FLOWER_OAUTH2_SECRET=f9155f764b7e466c445931a6e3cc7a42c4ce47be $ export FLOWER_OAUTH2_REDIRECT_URI=http://localhost:5555/login $ celery flower --auth_provider=flower.views.auth.GithubLoginHandler --auth=.*@example.com
6. 反向代理
用于将 Flower 部署到公网上使用
# Nginx配置 server { listen 80; server_name flower.example.com; charset utf-8; location / { proxy_pass http://localhost:5555; proxy_set_header Host $host; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } # 如果你使用了htpasswd文件来存储登录认证的话需要加载对应模块 auth_basic "Restricted"; auth_basic_user_file htpasswd;
7. 快捷部署
使用项目目录中的 Dockerfile 自行构建镜像使用
- 仓库镜像
# 很久没有更新了,不建议使用 $ docker pull mher/flower
- 自构镜像
# 下载项目 $ git clone https://github.com/mher/flower.git $ cd flower # 构建镜像 $ docker build -t "flower" .
- 工具运行
# docker # 内部监听地址为127.0.0.1 # 内部监听端口为5555,外部访问端口为49555 $ docker run -d --name=flower -p=49555:5555 flower flower --debug --port=5555 --broker=redis://:[email protected]:6379/0
# compose flower: name: flower image: mher/flower ports: - 8888:5555 command: ["flower", "--broker=redis://redis:6379/0", "--port=5555"] # ENV flower: name: flower image: mher/flower ports: - 8888:5555 environment: - FLOWER_PORT=5555 - CELERY_BROKER_URL=redis://redis:6379/0
- 参数选择
编号 | 命令参数 | 参数解释说明 |
---|---|---|
1 | --address | 设置运行 http 服务的地址 |
2 | --port | 设置运行 http 服务的端口地址;默认为 5555 端口 |
3 | --debug | 启用调试模式;默认为关闭状态 |
4 | --auto_refresh | 自动刷新仪表板;默认开启状态 |
5 | --broker_api | 表示RabbitMQ HTTP API的地址;来获取有关队列的信息 |
8. 截图展示
无图无真相