暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

celery之监控管理

3974


有几种工具可以用来监视和检查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

使用

  1. 下载
$ pip install flower

  1. 运行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_totalFlower注册event的次数。task, type, workercounter
flower_task_prefetch_time_seconds任务等待被worker执行所花费的时间。task, workergauge
flower_worker_prefetched_tasks一个worker预取的给定类型的任务数。task, workergauge
flower_task_runtime_seconds_count运行任务所花费的时间。task, workerhistogram
flower_worker_online显示worker的online状态。task, workerhistogram
flower_worker_number_of_currently_executing_tasks当前在此worker上执行的任务数。。task, workerhistogram

配置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


文章转载自PostgreSQL运维技术,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论