跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

PHP怎么处理Scout APM性能监控_PHP Laravel应用性能分析【方法】

Scout APM 的 PHP Agent 安装不必须用 Composer但强烈建议,因其仅通过 Composer 分发,本质是用户态 PSR-15 中间件,依赖自动加载和生命周期钩子。 Scout APM 的 PHP Agent 安装是否必须用 Composer? 不是必须,但强烈建议。Scout 官方 PHP Agent(
scoutapp/scout-apm-php
)仅通过 Composer 分发,不提供独立 .so 扩展或手动下载 zip 包。直接改
php.ini
加载扩展行不通——它本质是用户态的 PSR-15 兼容中间件 + 自动钩子注入器,依赖 Composer 的自动加载和生命周期钩子。 常见错误:试图把
scoutapm.so
编译进 PHP(它根本不存在),或把
vendor/scoutapp/...
目录硬拷到生产环境却不运行
composer install --no-dev
,导致 autoload 失败、
ScoutApm\ScoutApmAgent
类找不到。 执行
composer require scoutapp/scout-apm-php
(Laravel 8+ 可省略,因 Scout 已内置适配) 确保
vendor/autoload.php
在入口文件(如
public/index.php
)中被最先引入 不要删掉
vendor/scoutapp/scout-apm-php/src/ScoutApm/Agent.php
—— Laravel Scout 集成靠它启动 Laravel 中如何正确配置 SCOUT_KEY 和监控开关? Scout APM 不读取
.env
里的
SCOUT_KEY
,而是认
SCOUT_MONITOR
和
SCOUT_NAME
。漏配
SCOUT_MONITOR=true
是最常见“没数据”原因——即使 key 正确,Agent 默认静默不采集。 配置项必须写在
.env
里,不能只写在
config/scout.php
中:Agent 初始化早于 Laravel Config 加载,它直读环境变量。 立即学习 “ PHP免费学习笔记(深入) ”; PHP 8.5.5 PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。 下载
SCOUT_KEY=your-real-key-from-scout-dashboard
(从 https://scoutapm.com/ 右上角 Account → API Keys 复制)
SCOUT_MONITOR=true
(开发环境也建议设为
true
,否则本地看不到 trace)
SCOUT_NAME=my-laravel-app
(建议带环境后缀,如
my-laravel-app-prod
,方便 Dashboard 区分) 避免在
.env
写
SCOUT_ENABLED=true
—— 这个键名 Scout PHP Agent 完全不识别 为什么 Laravel 请求在 Scout Dashboard 显示为 “Unknown Route”? 这是 Laravel 路由未被 Scout 正确识别的典型表现,根源在于 Scout 的路由解析依赖 Laravel 的
Illuminate\Routing\Route
实例,而某些场景下它拿不到有效 route 对象。 常见触发点:使用了自定义中间件提前返回响应(如 JWT 鉴权失败直接
return response()->json(...)
)、在
Kernel.php
的
$middleware
数组里放了非标准中间件、或用了 Swoole/Swoft 等常驻内存模型但没调用
ScoutApm\ScoutApmAgent::reset()
。 检查中间件是否在
handle()
中提前
return
,若有,确保在 return 前调用
\ScoutApm\ScoutApmAgent::getInstance()->trackRequest();
确认
App\Http\Kernel
的
$middlewareGroups['web']
没混入非 HTTP 中间件(比如数据库连接池初始化类) Swoole 场景下,在每次请求开始时加
\ScoutApm\ScoutApmAgent::getInstance()->reset();
,否则旧 trace 数据会污染新请求 Scout APM 报错 “Unable to connect to ScoutAPM server” 怎么查? 这个错误不是网络连不上外网,而是 Agent 尝试连接本地 Unix socket 或 fallback 到 UDP 时失败。默认行为是先连
/tmp/scoutapm.sock
,失败后改用
127.0.0.1:6590
UDP 发送数据。但很多 Docker 环境或无 root 权限的 shared hosting 根本没有
/tmp
写权限,或防火墙禁了 UDP 6590。 解决方式不是开防火墙,而是强制走 HTTP 回调——虽然性能略低,但 100% 可控。 在
.env
加
SCOUT_CORE_AGENT_SOCKET=false
(注意不是
SCOUT_SOCKET=false
) 确保能访问
https://agent.scoutapp.com
(可 curl 测:
curl -I https://agent.scoutapp.com
) 如果用 Cloudflare 或企业代理,需放行
agent.scoutapp.com
的 SNI 和证书验证(Scout 使用 Let’s Encrypt,不接受自签名) 别碰
SCOUT_CORE_AGENT_HOST
和
SCOUT_CORE_AGENT_PORT
—— 它们只对本地 agent 进程有效,PHP Agent 不读这两个 Scout APM 的 PHP 集成深度依赖 Laravel 的请求生命周期钩子,一旦中间件顺序、响应提前终止、或常驻进程复用状态,trace 就容易断裂。最易忽略的是
SCOUT_MONITOR
环境变量缺失,以及 Swoole 环境下忘记
reset()
。

相关文章