actinity / laravel-queue-status
队列状态监控器
Requires
- ext-json: *
Requires (Dev)
- orchestra/testbench: ~7.0
- phpunit/phpunit: ^9.5
README
安装后,该工具将自动加入任务计划,并在默认队列上每分钟调度一次任务以更新缓存值。
/queue-status-monitor
端点显示监控器的状态,并将返回 200 OK 或 400(如果队列未在预期的阈值内运行,默认为 5 分钟。此端点可以被 Pingdom 或类似工具监控)。
如果您使用多个队列,或希望自定义阈值,您可以在 config/queue.php
中添加一个 monitor
数组。例如:
监控单个队列
"monitor" => "myqueue"
监控多个队列
"monitor" => [
"myqueue",
"myotherqueue"
]
监控具有自定义阈值的队列
"monitor" => [
["name" => myqueue","threshold" => 600],
]
阈值值以秒为单位指定,表示监控器报告队列失败的时间点,如果作业在此期间未运行。
延迟
除了报告最后运行时间外,/queue-status-monitor
端点还报告 延迟
。这是作业被调度和处理之间的时间。这不会影响整体状态,也不会触发失败。它仅用于参考。
失败的任务
默认情况下,如果您有失败的任务表,那么任何失败都将被视为错误并生成 400 状态码。您可以通过在 config/queue.php
中添加以下内容来禁用此功能。
"do_not_monitor_failed_jobs" => true
或者,如果您准备容忍失败的任务,但不想停止您知道是否存在其他问题;您可以通过监控独立端点而不是默认端点。
queue-status-monitor/without-failed
将忽略失败的任务,并仅报告阈值和配置错误。
queue-status-monitor/only-failed
将仅检查失败的任务。
超时与retry_after配置检查
队列工作进程通常通过 Supervisor 或类似工具配置,并且 queue:work
命令包含一个 --timeout
属性。如果此值高于相应的 retry_after
属性(在 config.queue
中),则可能导致作业重复。监控器会检查这一点,并在端点中发出警报(并抛出 400 响应)。
最后调度
队列监控器顶部的 最后调度
值表示调度器调度 queue-status:ping
命令的最后时间(通常在您使用标准的 Laravel crontab 配置时每分钟一次)。这本身不会触发任何错误,但显示为参考,以帮助调试如果问题是您的 crontab。
认证
如果您想保护您的监控端点,请将以下内容添加到队列配置中:
"status_password" => "YOURPASSWORD"
到队列配置。默认用户名为 'queues',但您也可以通过设置以下内容来自定义此名称:
"status_user" => "USERNAME"
在特定环境中禁用
您可以通过添加以下内容到队列配置中禁用队列监控器:
"status_monitor_disabled" => env("QUEUE_MONITOR_DISABLED",false)
然后,在您的 .env
文件中将该值设置为 true。