laravel生产环境需配置sentry异常监控、horizon队列积压告警、telescope调试面板及redis缓存健康检查;sentry必须用sentry/sentry-laravel包并正确配置dsn,horizon告警需自定义命令+定时任务,telescope生产环境须闭环权限控制,redis检查连接、内存使用率与键ttl。

在Laravel生产环境上线后,若未立即配置异常捕获、队列积压感知与缓存健康检查,所有线上故障将完全黑盒化,无法定位错误源头、无法预判任务堆积、无法发现缓存失效或内存溢出风险。
启用Sentry异常监控
执行composer require sentry/sentry-laravel安装Laravel专用SDK,【不要装 sentry/sentry】——通用PHP包不兼容Laravel生命周期,会导致事件静默丢失。
运行php artisan sentry:publish --dsn=https://xxx@o123.ingest.sentry.io/456,确保DSN完整包含协议、组织ID、项目ID和路径;该命令会自动写入.env并生成config/sentry.php。
检查.env中是否为SENTRY_LARAVEL_DSN=——若误写成SENTRY_DSN,Sentry初始化会静默失败,且无任何报错提示。
在任意路由中插入throw new \Exception('test sentry');,访问该路由后登录Sentry控制台→「Issues」页刷新,确认新事件出现;【禁止在 tinker 中调用 \Sentry\captureException() 测试】——它跳过Laravel中间件与服务提供者注册流程,结果不可信,极易误判集成状态。
配置Horizon队列积压告警
第一步:确认Horizon API可访问 → 访问/horizon/api/metrics,返回JSON即为正常;若404,请先检查app/Providers/HorizonServiceProvider.php是否已注册且gate授权逻辑未被注释。
第二步:创建自定义命令php artisan make:command CheckQueueBacklog,在handle()中写入:if (Horizon::stats()->waiting > 50) { // 发送告警 } ;阈值50需根据业务吞吐量调整,电商大促期建议设为100+,后台批处理可降至20。
第三步:将命令加入定时任务,例如每分钟执行一次:* * * * * cd /var/www/myapp && php artisan check:queue-backlog >> /dev/null 2>&1;注意不要用php artisan horizon:supervisor替代,后者仅启动进程,不触发积压检测逻辑。
部署Telescope调试面板
方法一:快速启用(仅限内网开发环境)
执行composer require laravel/telescope --dev→php artisan telescope:install→php artisan migrate;打开app/Providers/TelescopeServiceProvider.php,将gate()方法改为return $request->ip() === '192.168.10.5';,严格限制为公司出口IP访问。
方法二:生产环境安全启用(必须闭环)
① 安装与迁移完成后,在config/telescope.php中将'enabled' => env('TELESCOPE_ENABLED', false)设为false;
② 在app/Providers/TelescopeServiceProvider.php的register()方法末尾添加:if (app()->environment('production')) { Telescope::stopRecording(); };
③ 单独配置一个带身份校验的调试入口路由,仅允许登录且拥有debug权限的管理员临时开启:Telescope::startRecording();。
这一步操作起来很简单,直接把文件拖进去就行。但必须完成安装、迁移、权限控制和环境适配四步闭环操作,漏掉任一环节都会导致/telescope路径404或数据不采集,尤其注意生产环境默认禁用且不可逆开启。
Redis缓存健康检查
在部署脚本或监控巡检任务中加入以下检查项:
执行redis-cli -h $REDIS_HOST -p $REDIS_PORT -a "$REDIS_PASSWORD" ping,返回PONG表示连接通;若超时,优先排查防火墙策略而非重试。
执行redis-cli -h $REDIS_HOST -p $REDIS_PORT -a "$REDIS_PASSWORD" info memory | grep "used_memory_human",若值持续超过总内存85%,需触发清理策略或扩容。
对关键缓存键执行TTL检查:redis-cli -h $REDIS_HOST -p $REDIS_PORT -a "$REDIS_PASSWORD" ttl user_profile_123;返回-2说明键不存在,-1说明永不过期,非预期值需告警。











