1、介绍 有几种工具可用来监视和检查 Celery 集群。 本文将介绍其中的一些功能,以及与监视相关的特性,比如事件和广播命令。
2. Workers 命令行实用工具 celery 还可以用来检查和管理工作节点和某种程度上的任务。列出所有可用的命令
$ celery help
或列出具体命令的帮助信息
$ celery <command> --help
命令
$ 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>
>>>
$ celery -A proj status
$ celery -A proj result -t tasks.add 4e196aa4-0141-4601-8138-7aa33db0f577
注意,只要任务不使用自定义结果后端存储结果,使用时就可以省略任务的名称。
$ celery -A proj purge
你可以指定要清除消息的队列
$ celery -A proj purge -Q celery,foo,bar
或排除指定的消息队列
$ celery -A proj purge -X celery
$ celery -A proj inspect active
$ celery -A proj inspect scheduled
celery -A proj inspect reserved
$ celery -A myCeleryProj.app inspect registered
-> celery@AARON: OK
* myCeleryProj.tasks.add
* myCeleryProj.tasks.taskA
* myCeleryProj.tasks.taskB
$ 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
}
}
$ celery -A myCeleryProj.app inspect query_task 898e9c89-d2ac-4a9c-aedc-2ff505ccab37
也可以一次查询多个任务
$ celery -A proj inspect query_task id1 id2 ... idN
celery -A proj control enable_events/disable_events
$ celery -A proj migrate redis://localhost amqp://localhost
这个命令将把一个中间人上的所有任务迁移到另一个中间人上。由于这个命令是新实验性的,在执行命令之前,确保对重要数据进行备份。 注意:inspect 和 control 命令默认对所有的 worker 生效,你可单独指定一个worker或一个worker的列表。命令如下所示:
$ 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
Flower是一个基于实时Web服务的Celery监控和管理工具。它正在积极开发中,但已经是一个必不可少的工具。作为Celery推荐的监视器,它淘汰了Django-Admin监视器、celerymon监视器和基于ncurses的监视器。 具有以下特色:
workers
monitor
你可以使用 pip 安装 Flower
pip install flower
运行下面的 flower 命令你将得到一个可以访问的 web 服务器。
$ 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,但你也可以手工指定端口,命令如下所示 :
$ celery -A myCeleryProj.app flower --port=5555
中间人的url也可以通过参数 --broker参数来指定
$ 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做为中间人,为监控Celery 集群 ,你可以使用redis-cli命令来列出消息队列的长度,命令如下所示:
$ redis-cli -h HOST -p PORT -n DATABASE_NUMBER llen QUEUE_NAME
Celery 默认的队列名称为 celery,为得到所有键值信息,可以使用如下命令:
$ redis-cli -h HOST -p PORT -n DATABASE_NUMBER keys \*