

新闻资讯
行业动态Horizon仅监控Laravel队列作业生命周期,不监控Redis服务状态;需通过redis-cli或第三方工具检查Redis内存、连接等;安装时须确认database.php、queue.php配置及HORIZON_PREFIX环境变量。
Horizon 面板本身不直接监控 Redis 服务状态(比如内存、连接数、持久化),它只监控 Laravel 应用通过 RedisQueue 推送和消费的队列作业生命周期。想看队列“有没有卡住”“积压多少”“谁在慢”,Horizon 是对的工具;但 Redis 连不上或 OOM 了,得靠 redis-cli info 或第三方监控。
很多面板打不开或数据空白,根源不在 Horizon 本身,而在底层 Redis 连接没对齐:
config/database.php 中 redis 默认配置必须指向实际运行的 Redis 实例(尤其注意 host 和 port,Docker 环境常错配为 127.0.0.1)config/queue.php 的 redis 连接必须启用 retry_after(建议 ≥ 90),否则超时作业不会重入 failed_jobs 表,Horizon 就看不到失败记录HORIZON_PREFIX 环境变量不能与其它 Laravel 应用冲突(默认是 laravel:horizon:),否则多个项目会互相覆盖队列统计键这是最常被误读的部分:所有数字都基于 Horizon 自身采集的 Redis Sorted Set(laravel:horizon:jobs 等),不是实时 llen 结果:
Waiting:当前在 queues:default(或你定义的队列名)List 里的作业数 —— 这个值 ≈ LLEN queues:default,代表真正待处理量Pending:已推入但尚未被 Worker 拉取的作业(存在 laravel:horizon:jobs ZSET 中,score 为未来时间戳),通常为 0;若持续 > 0,说明 Worker 崩溃或未启动Recent:过去 1 小时内完成/失败的作业总数,用于判断吞吐是否异常下滑Failed:失败作业数,对应 failed_jobs 表记录,不是 Redis 里的临时失败标记别只盯着 Horizon 页面刷新,按顺序查这三处:
php artisan horizon:supervisors,确认 Supervisor 进程是否存活(输出应含
status: running)redis-cli -h 127.0.0.1 -p 6379 LLEN queues:default,如果该值远大于 Horizon 显示的
Waiting,说明 Horizon 采集延迟或崩溃tail -f storage/logs/horizon-*.log,重点找
Connection refused、read error on connection —— 这类错误 Horizon 不报红,但会导致指标停更Horizon 的统计依赖定时采样(默认每 5 秒扫一次 Redis),所以「Waiting」数字有轻微滞后;真正要保可靠性,得配合 redis-cli ping 健康检查和 MONITOR 抓包看实际 LPUSH/BRPOP 流量。