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:guest@localhost:5672//
$ flower -A proj --broker_api=http://user:pass@rabbitmq-server:15672/api/
- [2] 通过 flowerconfig.py 配置文件
# RabbitMQ management api
broker_api = 'http://guest:guest@localhost: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:guest@localhost: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. 截图展示
无图无真相