celery 状态监控

Celery 监控(常规监控和 Flower)

1、Flower 简介

Flower是基于web的监控和管理Celery的工具

2、Flower 特性

  • 用Celery事件实时监控

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

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

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

3、Flower 使用方法

  • Docker 使用方法(推荐使用)
1
2
3
4
5
6
7
8
9
10
11
12
version: "3.7"

services:
domain-certificate-flower:
image: mher/flower:0.9.7
container_name: domain-certificate-flower
restart: always
environment:
- CELERY_BROKER_URL=amqp://{username}:{password}@{ip}:{port}/{vhost}
- FLOWER_PORT=5555
ports:
- 5568:5555

注意: 当 image 版本号有变化的时候,使用方法会有不同,详情请查看flower 官方文档

  • 常规使用方法
1
celery -A celery_app --broker=amqp://{username}:{password}@{ip}:{port}/{vhost} flower --address=127.0.0.1 --port=5555

4、Flower 使用截图

  • 指示板

image-20211008152133538

  • 任务栏

image-20211008152259962

  • Broker

image-20211008152315882

  • Worker 详情

image-20211008152402374

image-20211008152417340

5、命令行查看

  • 查看 worker 状态
1
2
3
4
5
6
7
$ celery -A proj status
celery@e12d18b11bf8: OK
celery@4e8eb97af6a8: OK
celery@0d9dcbcd7862: OK
celery@e858cc9a321f: OK
celery@7254993a84be: OK
...
  • 查看 worker 具体信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ celery -A proj inspect stats
-> celery@0d9dcbcd7862: OK
{
"broker": {...},
"clock": "649",
"pid": 1,
"pool": {...},
"prefetch_count": 16,
"rusage": {...},
"total": {}
}
-> celery@4e8eb97af6a8: OK
{
"broker": {...},
"clock": "649",
"pid": 1,
"pool": {...},
"prefetch_count": 16,
"rusage": {...},
"total": {}
}
...
  • 常看当前正在执行的 task
1
2
3
4
5
6
$ celery -A proj inspect active
-> celery@ec8e264c5c0e: OK
- empty -
-> celery@16c1f1a6d8ca: OK
* {'id': 'b2626431-4420-4dde-a596-be7b63942ac4', 'name': 'examples.tasks.low_task', 'args': [], 'kwargs': {}, 'type': 'examples.tasks.low_task', 'hostname': 'celery@16c1f1a6d8ca', 'time_start': 1596941119.8071737, 'acknowledged': True, 'delivery_info': {'exchange': '', 'routing_key': 'low', 'priority': None, 'redelivered': False}, 'worker_pid': 7}
...
  • 查看当前队列信息
1
2
3
4
5
6
7
8
$ celery -A proj inspect active_queues
-> celery@d6dd3883d8a8: OK
* {'name': 'default', 'exchange': {'name': 'default', 'type': 'direct', 'arguments': None, 'durable': True, 'passive': False, 'auto_delete': False, 'delivery_mode': None, 'no_declare': False}, 'routing_key': 'default', 'queue_arguments': None, 'binding_arguments': None, 'consumer_arguments': None, 'durable': True, 'exclusive': False, 'auto_delete': False, 'no_ack': False, 'alias': None, 'bindings': [], 'no_declare': None, 'expires': None, 'message_ttl': None, 'max_length': None, 'max_length_bytes': None, 'max_priority': None}
-> celery@e12d18b11bf8: OK
* {'name': 'default', 'exchange': {'name': 'default', 'type': 'direct', 'arguments': None, 'durable': True, 'passive': False, 'auto_delete': False, 'delivery_mode': None, 'no_declare': False}, 'routing_key': 'default', 'queue_arguments': None, 'binding_arguments': None, 'consumer_arguments': None, 'durable': True, 'exclusive': False, 'auto_delete': False, 'no_ack': False, 'alias': None, 'bindings': [], 'no_declare': None, 'expires': None, 'message_ttl': None, 'max_length': None, 'max_length_bytes': None, 'max_priority': None}
-> celery@e05921129af4: OK
* {'name': 'high', 'exchange': {'name': 'high', 'type': 'direct', 'arguments': None, 'durable': True, 'passive': False, 'auto_delete': False, 'delivery_mode': None, 'no_declare': False}, 'routing_key': 'high', 'queue_arguments': None, 'binding_arguments': None, 'consumer_arguments': None, 'durable': True, 'exclusive': False, 'auto_delete': False, 'no_ack': False, 'alias': None, 'bindings': [], 'no_declare': None, 'expires': None, 'message_ttl': None, 'max_length': None, 'max_length_bytes': None, 'max_priority': None}
...

6、总结

     针对 Flower 的使用主要是各个版本与 Celery 需要一一对应,当前使用的为 `Flower=0.9.7`与`Celery=4.4.7`