如何解决AWS Lambda中Bref部署Laravel应用的New Relic无数据问题
修复New Relic无法采集Laravel(Bref/AWS Lambda)数据的方案
一、核心修复步骤
- 匹配New Relic层与PHP版本:
要确保使用的New Relic Lambda层和Bref的PHP运行时版本完全对应,比如PHP 8.1就用New Relic的PHP 8.1层,别混用Node.js/Python的层。层ARN要对应你的AWS区域,比如us-east-1的PHP8.1层ARN是arn:aws:lambda:us-east-1:451483290750:layer:NewRelicPHP81:1。 - 修正
newrelic-settings.ini配置:
配置文件要放在项目根目录的php/conf.d/下,必填项不能少:
别加newrelic.appname = "你的Laravel应用名" newrelic.license = "你的New Relic许可证密钥" newrelic.distributed_tracing_enabled = true newrelic.lambda_integration = truenewrelic.daemon.address,Lambda环境不需要本地守护进程。 - 调整Serverless.yaml的层加载顺序:
New Relic层必须排在Bref的PHP层前面,不然扩展加载会出问题,同时补充环境变量:functions: web: handler: public/index.php layers: - { Ref: NewRelicPHPLayer } # 先加载New Relic层 - ${bref:layer.php-81-fpm} # 再加载Bref PHP层 environment: NEW_RELIC_LAMBDA_HANDLER: "public/index.php" NEW_RELIC_APP_NAME: "你的Laravel应用名" NEW_RELIC_LICENSE_KEY: "你的New Relic许可证密钥" - 确保Laravel日志配置兼容:
在config/logging.php的日志通道里保留errorlog,New Relic依赖PHP错误日志来捕获信息:'channels' => [ 'stack' => [ 'driver' => 'stack', 'channels' => ['single', 'errorlog'], // 必须包含errorlog ], ],
二、排查问题的实操步骤
- 查CloudWatch日志找初始化错误:
去Lambda函数的CloudWatch日志组里搜NewRelic关键词,看有没有加载失败的提示:比如Failed to load New Relic extension说明层不兼容;License key missing就是密钥没配对。如果看到New Relic initialized successfully,说明扩展加载正常。 - 手动触发Lambda看上报日志:
在Lambda控制台发个测试事件,然后搜日志里有没有Sending data to New Relic这类上报记录。同时检查Lambda执行角色有没有lambda:GetFunctionConfiguration权限,New Relic层需要这个权限获取函数信息。 - 验证New Relic扩展是否加载:
在Laravel里加个测试路由输出phpinfo:
调用这个路由后搜Route::get('/phpinfo', function () { phpinfo(); });newrelic,确认扩展已加载,且配置项和你设置的一致。 - 检查New Relic控制台的过滤条件:
确认控制台选的区域和Lambda区域一致,时间范围调对(别只看最近1小时),应用名称要和newrelic.appname完全匹配,避免过滤掉数据。
内容的提问来源于stack exchange,提问作者Kristi Jorgji
相关产品推荐
相关产品推荐

