You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过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命令:

    1. 生成命令文件:php artisan make:command QueueStats
    2. 编辑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}");
          }
      }
      
    3. 运行命令: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

火山引擎 最新活动