前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Celery 监控和管理向导

Celery 监控和管理向导

作者头像
somenzz
发布2020-12-10 11:23:16
2.7K0
发布2020-12-10 11:23:16
举报
文章被收录于专栏:Python七号Python七号

1、介绍 有几种工具可用来监视和检查 Celery 集群。 本文将介绍其中的一些功能,以及与监视相关的特性,比如事件和广播命令。

2. Workers 命令行实用工具 celery 还可以用来检查和管理工作节点和某种程度上的任务。列出所有可用的命令

代码语言:javascript
复制
$ celery help

或列出具体命令的帮助信息

代码语言:javascript
复制
$ celery <command> --help

命令

  • shell : 进入含有celery变量的Python解释器环境,celery变量有 当前的celery app,tasks也会自动加入,除非设置了--without-tasks 标志被设置
代码语言:javascript
复制
$ celery -A myCeleryProj.app shell
Python 3.6.3 (v3.6.3:2c5fed8, Oct  3 2017, 18:11:49) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> locals().keys()
dict_keys(['app', 'celery', 'Task', 'chord', 'group', 'chain', 'chunks', 'xmap', 'xstarmap', 'subtask', 'signature', 'add', 'taskB', 'taskA', '__builtins__'])
>>> app
<Celery myCeleryProj at 0x1c5fe6a47b8>
>>> add
<@task: myCeleryProj.tasks.add of myCeleryProj at 0x1c5fe6a47b8>
>>> taskB.delay()
<AsyncResult: 914698c7-082f-4771-93b6-c6479f89c417>
>>> 
  • status 在这个集群中列出激活的节点
代码语言:javascript
复制
$ celery -A proj status
  • result 显示任务的执行结果
代码语言:javascript
复制
$ celery -A proj result -t tasks.add 4e196aa4-0141-4601-8138-7aa33db0f577

注意,只要任务不使用自定义结果后端存储结果,使用时就可以省略任务的名称。

  • purge 从所有配置的任务队列清除消息。这个命令将从配置的任务队列中清除所有的消息。此项操作不可撤销,消息将被永久清除。
代码语言:javascript
复制
$ celery -A proj purge

你可以指定要清除消息的队列

代码语言:javascript
复制
$ celery -A proj purge -Q celery,foo,bar

或排除指定的消息队列

代码语言:javascript
复制
$ celery -A proj purge -X celery
  • inspect active 列出激活的任务。
代码语言:javascript
复制
$ celery -A proj inspect active
  • inspect scheduled 列出计划任务
代码语言:javascript
复制
$ celery -A proj inspect scheduled
  • inspect reserved 列出保留任务
代码语言:javascript
复制
celery -A proj inspect reserved
  • inspect registered 列出已注册的任务
代码语言:javascript
复制
$ celery -A myCeleryProj.app inspect registered
-> celery@AARON: OK
    * myCeleryProj.tasks.add
    * myCeleryProj.tasks.taskA
    * myCeleryProj.tasks.taskB
  • 列出worker的统计信息。
代码语言:javascript
复制
$ celery -A myCeleryProj.app inspect stats
-> celery@AARON: OK
    {
        "broker": {
            "alternates": [],
            "connect_timeout": 4,
            "failover_strategy": "round-robin",
            "heartbeat": 120.0,
            "hostname": "127.0.0.1",
            "insist": false,
            "login_method": null,
            "port": 6379,
            "ssl": false,
            "transport": "redis",
            "transport_options": {},
            "uri_prefix": null,
            "userid": null,
            "virtual_host": "0"
        },
        "clock": "7905",
        "pid": 7336,
        "pool": {
            "free-threads": 4,
            "max-concurrency": 4,
            "running-threads": 0
        },
        "prefetch_count": 16,
        "rusage": "N/A",
        "total": {
            "myCeleryProj.tasks.add": 6,
            "myCeleryProj.tasks.taskA": 5,
            "myCeleryProj.tasks.taskB": 18
        }
    }
  • inspect query_task: 通过 id 获取任务的信息。
代码语言:javascript
复制
$ celery -A myCeleryProj.app inspect query_task 898e9c89-d2ac-4a9c-aedc-2ff505ccab37

也可以一次查询多个任务

代码语言:javascript
复制
$ celery -A proj inspect query_task id1 id2 ... idN
  • control enable_events: 启用/不启用事件。
代码语言:javascript
复制
celery -A proj control enable_events/disable_events
  • migrate: 将任务由一个中间人转移至另一个中间人。
代码语言:javascript
复制
$ celery -A proj migrate redis://localhost amqp://localhost

这个命令将把一个中间人上的所有任务迁移到另一个中间人上。由于这个命令是新实验性的,在执行命令之前,确保对重要数据进行备份。 注意:inspect 和 control 命令默认对所有的 worker 生效,你可单独指定一个worker或一个worker的列表。命令如下所示:

代码语言:javascript
复制
$ celery -A proj inspect -d w1@e.com,w2@e.com reserved
$ celery -A proj control -d w1@e.com,w2@e.com enable_events

实时Celery的web 监控工具 - Flower

Flower是一个基于实时Web服务的Celery监控和管理工具。它正在积极开发中,但已经是一个必不可少的工具。作为Celery推荐的监视器,它淘汰了Django-Admin监视器、celerymon监视器和基于ncurses的监视器。 具有以下特色:

  • 使用Celery事件来实时监控。
    • 任务的进度和历史信息
    • 可以查看任务的详情(参数,开始时间,运行时间等)
    • 提供图表和统计信息
  • 远程控制
    • 查看worker的状态和统计信息
    • 关闭和重启worker实例
    • 控制worker的缓冲池大小和自动优化设置
    • 查看并修改一个worker实例所指向的任务队列
    • 查看目前正在运行的任务
    • 查看定时或间隔性调度的任务
    • 查看已保留和已撤销的任务
    • 时间和速度限制
    • 配置监视器
    • 撤销或终止任务
  • HTTP API
    • 列出worker
    • 关闭一个worker
    • 重启worker的缓冲池
    • 增加/减少/自动定量 worker的缓冲池
    • 从任务队列消费(取出任务执行)
    • 停止从任务队列消费
    • 列出任务列表/任务类型
    • 获取任务信息
    • 执行一个任务
    • 按名称执行任务
    • 获得任务结果
    • 改变工作的软硬时间限制
    • 更改任务的速率限制
    • 撤销一个任务
  • OpenID 身份验证

截图

workers

monitor

使用方法

你可以使用 pip 安装 Flower

代码语言:javascript
复制
pip install flower

运行下面的 flower 命令你将得到一个可以访问的 web 服务器。

代码语言:javascript
复制
$ celery -A myCeleryProj.app flower
[I 180907 22:34:43 command:139] Visit me at http://localhost:5555
[I 180907 22:34:43 command:144] Broker: redis://127.0.0.1:6379/0
[I 180907 22:34:43 command:147] Registered tasks: 
    ['celery.accumulate',
     'celery.backend_cleanup',
     'celery.chain',
     'celery.chord',
     'celery.chord_unlock',
     'celery.chunks',
     'celery.group',
     'celery.map',
     'celery.starmap',
     'myCeleryProj.tasks.add',
     'myCeleryProj.tasks.taskA',
     'myCeleryProj.tasks.taskB']
[I 180907 22:34:43 mixins:224] Connected to redis://127.0.0.1:6379/0

从输出的信息可以看出,默认的端口为 http://localhost:5555,但你也可以手工指定端口,命令如下所示 :

代码语言:javascript
复制
$ celery -A myCeleryProj.app flower --port=5555

中间人的url也可以通过参数 --broker参数来指定

代码语言:javascript
复制
$ celery -A myCeleryProj.app flower --port=5555 --broker=redis://127.0.0.1:6379/0

打开浏览器 http://localhost:5555 可以看到flower的web界面

celery1.png

celery2.png

celery3.png

celery4.png

Flower 还有更多的功能,包括用户授权功能,更多详细信息请访问flower的官方文档

Redis

如果你使用 Redis做为中间人,为监控Celery 集群 ,你可以使用redis-cli命令来列出消息队列的长度,命令如下所示:

代码语言:javascript
复制
$ redis-cli -h HOST -p PORT -n DATABASE_NUMBER llen QUEUE_NAME  

Celery 默认的队列名称为 celery,为得到所有键值信息,可以使用如下命令:

代码语言:javascript
复制
$ redis-cli -h HOST -p PORT -n DATABASE_NUMBER keys \*
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-09-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python七号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实时Celery的web 监控工具 - Flower
    • 截图
    • 使用方法
    • Redis
    相关产品与服务
    消息队列 CMQ 版
    消息队列 CMQ 版(TDMQ for CMQ,简称 TDMQ CMQ 版)是一款分布式高可用的消息队列服务,它能够提供可靠的,基于消息的异步通信机制,能够将分布式部署的不同应用(或同一应用的不同组件)中的信息传递,存储在可靠有效的 CMQ 队列中,防止消息丢失。TDMQ CMQ 版支持多进程同时读写,收发互不干扰,无需各应用或组件始终处于运行状态。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档