统计排队的 Celery 任务
·
如果您将 Redis 用于 Celery 队列,则有一种方法可以计算按任务分组的排队任务的数量,而无需外部工具。请注意,此方法假定您为任务使用 JSON 序列化程序。
使用您选择的 Redis 客户端,我选择了redli(支持 tls),使用LRANGE获取所有任务的列表,通过管道将它们通过jq查询headers->task、sort并使它们成为uniq/ 计数:
> redli [your connection parameters] lrange celery 0 30000 | jq '.headers.task' | sort | uniq -c
533 "devices.adapters.lorawan.tasks.run_lora_payload_decoder"
2 "devices.adapters.particle.tasks.run_particle_payload_decoder"
92 "devices.tasks.call_device_function"
8556 "devices.tasks.ping_device"
9682 "devices.tasks.process_device_field_rules"
5 "devices.tasks.send_device_offline_email"
2 "dzeroos.tasks.call_command"
8 "dzeroos.tasks.flush_command_queue"
1 "dzeroos.tasks.publish_device_config"
1 "dzeroos.tasks.publish_protobuf_config"
进入全屏模式 退出全屏模式
奖励:任务详情统计
就我而言,我需要对一项任务的其中一个参数有一些了解(我正在调查一个导致排长队的循环)。这需要更多的jq和 bash-magic 并且可能不适合您的用例,我只是将其粘贴在这里以供参考:
> redli [your connection parameters] lrange celery 0 1000 | jq -c '. | select(.headers.task | contains("taskname")) .body' | while read -r line; do echo "$line" | tr -d '"' | base64 -D | jq '.[0][0]'; done | sort | uniq -c
15 "04576f6e-d5d1-45f4-8eef-a17e015335f4"
9 "05264cc7-ae60-4f4f-9a18-2451e8d83f65"
25 "4e240129-b84e-4e70-9f85-0e06f7a01875"
224 "6c6a9aeb-10c7-417f-a928-791399d8adb9"
进入全屏模式 退出全屏模式
更多推荐
所有评论(0)