대기 중인 Celery 작업 계산

2896 단어 redisdjangobashcelery
Celery 대기열에 Redis를 사용하는 경우 외부 도구 없이도 작업별로 그룹화된 대기열에 있는 작업 수를 계산하는 방법이 있습니다. 이 접근 방식에서는 작업에 JSON 직렬 변환기를 사용하고 있다고 가정합니다.

선택한 Redis 클라이언트를 사용하여 redli(tls 지원)을 선택하고 LRANGE을 사용하여 모든 작업 목록을 가져오고 jq을 통해 파이프하여 쿼리 headers->task, sortuniq을 쿼리합니다.

> 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"

좋은 웹페이지 즐겨찾기