如何通过CLI监控作为队列引擎的Redis(类Beanstalkd方式)
Laravel Redis队列CLI监控方案(适配AWS ElastiCache)
我刚好处理过类似的Laravel Redis队列监控需求,给你几个实用的CLI方案,完全适配VPC内的ElastiCache环境,不用依赖GUI或RDB工具:
1. 用Laravel自带Artisan命令(最推荐)
Laravel本身就提供了Redis队列的监控命令,能直接解析序列化的任务数据,完全贴合你的需求:
实时监控队列状态:
这个命令会定时刷新各队列的任务数、失败数等关键指标,非常适合实时排查拥堵:php artisan queue:monitor --interval=5 # 每5秒刷新一次查看队列任务数统计:
快速获取所有队列的待处理任务数量:php artisan queue:list自定义统计命令:
如果需要更详细的维度(比如延迟队列、预留队列的数量),可以自己写个Artisan命令:- 生成命令文件:
php artisan make:command QueueStats - 编辑
app/Console/Commands/QueueStats.php:namespace App\Console\Commands; use Illuminate\Console\Command; use Illuminate\Support\Facades\Queue; class QueueStats extends Command { protected $signature = 'queue:stats'; protected $description = 'Show detailed Redis queue statistics'; public function handle() { // 替换成你的实际队列名称 $queues = ['high', 'default', 'low']; $this->table( ['队列名称', '待处理任务', '延迟任务', '预留任务'], collect($queues)->map(function ($queue) { return [ $queue, Queue::size($queue), Queue::size("{$queue}:delayed"), Queue::size("{$queue}:reserved"), ]; })->toArray() ); $failedCount = Queue::getFailedJobsCount(); $this->info("累计失败任务数: {$failedCount}"); } } - 运行命令:
php artisan queue:stats,就能看到结构化的完整统计。
- 生成命令文件:
2. Redis CLI结合PHP解析序列化内容
如果不想依赖Laravel环境,也可以直接用Redis CLI获取数据,再用PHP解析Laravel的序列化格式:
首先,连接到ElastiCache的Redis实例(必须在同一VPC内的EC2或Bastion主机执行):
redis-cli -h your-elasticache-endpoint -p 6379 # 有密码的话加 -a your-password
然后执行以下命令获取关键信息:
查看队列任务数:
LLEN queues:high # 查看high队列的待处理任务数 LLEN queues:high:delayed # 查看延迟任务数 LLEN queues:high:reserved # 查看正在处理中的预留任务数解析单个任务内容:
先获取队列中的一个任务,再用PHP解析序列化数据:# 获取队列第一个任务 TASK=$(redis-cli -h your-elasticache-endpoint -p 6379 LRANGE queues:high 0 0) # 用PHP解析(Laravel默认用PHP序列化,若用JSON序列化则换json_decode) echo "<?php echo print_r(unserialize('$TASK'), true); ?>" | php这样就能看到任务的类名、参数、创建时间等清晰信息,排查拥堵原因。
3. Redis原生统计命令
用Redis的INFO命令快速查看队列相关的资源占用情况:
# 查看键空间统计,包括各队列键的数量 redis-cli -h your-elasticache-endpoint -p 6379 info keyspace # 查看单个队列键的内存占用,判断是否有超大任务堆积 redis-cli -h your-elasticache-endpoint -p 6379 memory usage queues:high
注意事项
- 生产环境建议优先用Laravel Artisan命令,因为它能准确识别Laravel队列的所有状态(延迟、预留、失败),避免解析序列化时的兼容性问题。
- 连接ElastiCache时,确保执行命令的主机在同一VPC内,或者通过VPC peering/端口转发访问,不要直接暴露Redis到公网。
内容的提问来源于stack exchange,提问作者abbood




