Flower实时监控Celery工具


Flower 是一个基于 Web 的监控和管理 Celery 的工具,目前仍在活跃的开发当中且是一个很重要的工具了。这是推荐使用的 Celery 监控工具,在快速的开发和变化之中, 你也可以得到相对稳定的版本。

Flower实时监控Celery工具


1. 特性

我能帮你干什么事情?

  • 用 Celery 事件实时监控

    • 任务进程和历史
    • 能够显示任务的详细信息(arguments/start time/runtime等)
    • 图形化和统计
  • 远程控制

    • 查看worker状态和统计
    • 关闭和重启worker实例
    • 控制进程池大小/平滑配置(autoscale settings)
    • 查看和修改一个worker实例消费的队列
    • 查看当前正在运行的tasks
    • 查看计划任务(ETA(估计到达的时间)/倒计时)
    • 应用时间和速率限制
    • 配置浏览器(Configuration viewer)
    • 撤销或终止任务
  • Broker monitoring(中间人监控)

    • 查看所有Celery队列的统计
    • 队列长度图
  • HTTP API

    • 可以通过 APICelery 进行操作
  • 登录认证

    • 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. 截图展示

无图无真相

Flower实时监控Celery工具

Flower实时监控Celery工具


文章作者: Escape
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Escape !
  目录