有几种工具可以用来监视和检查celery集群, 本文主要是介绍命令行工具和flower。
命令行工具
# 列出集群中的活动节点
$ 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
# 使用-X选项排除队列
celery -A proj purge -X celery
# 列出所有活动任务
$ celery -A proj inspect active
# 列出所有ETA(estimated time of arrival)任务
$ celery -A proj inspect scheduled
# 列出所有reserved tasks。reserved task是指已经被worker预取的任务,并且当前正在等待被执行(不包括ETA值设置的任务)。
$ celery -A proj inspect reserved
# 列出被撤销任务的历史记录
$ celery -A proj inspect revoked
# 列出注册任务列表
$ celery -A proj inspect registered
# 显示workers统计数据(参见statistics)
$ celery -A proj inspect stats
# 按id显示任务信息。任何在这组id中有一个任务的worker都会用状态和信息来响应。
$ celery -A proj inspect query_task e9f6c8f0-fec9-4ae8-a8c6-cf8c8451d4f8
说一下purge(清除)操作,这个命令在某些情况下还是挺有用的。比如下面的这种情况。
我们设置了一个定时任务,使用celery beat来发送任务,worker负责从redis中获取任务并执行任务。假设我们先启动beat,并运行一段时间,这段时间内,beat不断发送任务到redis,但是不去启动任何worker。这种情况下,beat发送的任务就会堆积在redis中以Queue名称命名的list中。
127.0.0.1:6379> llen backup
(integer) 4
这个时候,我们再启动worker,会导致worker瞬时执行所有list中的任务。
如果我们不想worker执行已经“过期”的任务,我们可以执行queue的purge操作。当然也可以直接操作redis,清空list。
# 清除check队列中的消息
$ celery -A proj purge -Q backup
Flower
flower 是一款基于web的celery实时监控和管理工具。
我们可以使用celery event进行实时监控: 任务进度和历史记录 显示任务细节(参数、启动时间、运行时间等) 图表和统计数据 远程控制 查看工人状态和统计信息 关闭并重新启动工作实例 控制工作池大小和自动伸缩设置 查看和修改工作实例使用的队列 查看当前运行的任务 查看计划任务(ETA/倒计时) 查看保留和撤销的任务 应用时间和速率限制 查看配置 撤销或终止任务 HTTP API
使用
下载
$ pip install flower
运行flower命令将启动一个web服务器。
$ celery -A proj flower
默认端口是http://localhost:5555,可以使用-port参数来指定其他端口。
$ celery -A proj flower --port=8000
访问http://localhost:5555:
Flower+Prometheus+Grafana
flower exports通过http接口 /metrics 向prometheus暴露celery worker和task的metrics。
默认情况下,在本地机器上,flower的指标可以在localhost:5555/metrics处获得。
Prometheus exports
负责将监控数据采集的端点通过http服务的形式暴露给Prometheus Server。Prometheus Server通过访问该Exporter提供的接口,获取到需要采集的监控数据。
配置prometheus
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ['localhost:9090']
- job_name: flower
static_configs:
- targets: ['localhost:5555']
访问http://localhost:9090/graph,graph标签,并在搜索框键入flower,应该会在下方自动显示flower中所有可用的指标。
一些指标解释
指标名 | 描述 | Labels | 类型 |
---|---|---|---|
flower_events_total | Flower注册event的次数。 | task, type, worker | counter |
flower_task_prefetch_time_seconds | 任务等待被worker执行所花费的时间。 | task, worker | gauge |
flower_worker_prefetched_tasks | 一个worker预取的给定类型的任务数。 | task, worker | gauge |
flower_task_runtime_seconds_count | 运行任务所花费的时间。 | task, worker | histogram |
flower_worker_online | 显示worker的online状态。 | task, worker | histogram |
flower_worker_number_of_currently_executing_tasks | 当前在此worker上执行的任务数。。 | task, worker | histogram |
配置Grafana
1.在grafana中添加prometheus作为数据源:
2.导入 Celery Monitoring Dashboard
下载模板:https://github.com/mher/flower/blob/master/examples/celery-monitoring-grafana-dashboard.json
参考:
https://docs.celeryproject.org/en/stable/userguide/monitoring.html
https://flower.readthedocs.io/en/latest/prometheus-integration.html#celery-flower-prometheus-grafana-integration-guide