scoutapp/scout-apm-laravel

Scout 应用性能监控代理 - https://scoutapm.com

2.5.0 2024-06-10 14:00 UTC

README

使用 Scout 的 PHP APM 代理监控 PHP Laravel 应用程序的性能。安装并配置 scout-apm 包后,将收集详细性能指标和事务跟踪。

要求

  • PHP 版本:PHP 7.2+(推荐 PHP 8.3+)
  • Laravel 版本:5.5+

快速入门

需要 Scout 账户。 注册 Scout

composer require scoutapp/scout-apm-laravel

然后使用 Laravel 的 artisan vendor:publish 确保配置可以缓存

php artisan vendor:publish --provider="Scoutapm\Laravel\Providers\ScoutApmServiceProvider"

配置

在你的 .env 文件中,确保设置一些配置变量

SCOUT_KEY=ABC0ZABCDEFGHIJKLMNOP
SCOUT_NAME="My Laravel App"
SCOUT_MONITOR=true

你的密钥可以在 Scout 组织设置页面 找到。

日志详细程度

一旦设置好 Scout 并确认一切正常工作,你可以减少库的日志系统的详细程度。库默认情况下故意非常嘈杂,这为我们提供了更多支持客户的信息,如果有什么问题。然而,如果一切按预期工作,可以通过将配置密钥 log_level 设置为更高的 Psr\Log\LogLevel 来减少这些日志。例如,如果你使用 .env 配置

SCOUT_LOG_LEVEL=error

或者如果你使用 config/scout_apm.php

$config[\Scoutapm\Config\ConfigKey::LOG_LEVEL] = \Psr\Log\LogLevel::ERROR;

\Psr\Log\LogLevel 中定义的任何常量都可以作为此配置选项的值。

Laravel 11 错误处理

在 Laravel 11 中,App\Exceptions\Handler 方法已被弃用,并在配置应用程序时在 bootstrap/app.php 中添加了新的方法 withExceptions()。为了使 Scout APM 错误处理能够捕获未捕获的异常,你应该添加适当的 Scout APM 调用,例如

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        commands: __DIR__.'/../routes/console.php',
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware) {
        // ...
    })
    ->withExceptions(function (Exceptions $exceptions) {
        // Add the following call to enable uncaught exceptions in Scout APM error reporting:
        $exceptions->reportable(function (Throwable $e) {
            app()->make(\Scoutapm\ScoutApmAgent::class)->recordThrowable($e);
        });
    })->create();

文档

有关完整安装和故障排除文档,请访问我们的 帮助网站

支持

请联系我们至 support@scoutapm.com 或在此存储库中创建一个问题。

功能

The Laravel library

  • 在容器中注册服务 \Scoutapm\ScoutApmAgent::class(用于依赖注入)
  • 提供 Facade \Scoutapm\Laravel\Facades\ScoutApm
  • 包装视图引擎以监控视图渲染时间
  • 注入中间件以监控控制器并将统计信息发送到 Scout Core 代理
  • 向数据库连接添加监听器以监控 SQL 查询

自定义监控

为了执行自定义监控,你可以将代码包装在对 instrument 方法的调用中。例如,给定一些要监控的代码

$request = new ServiceRequest();
$request->setApiVersion($version);

使用为 Laravel 提供的 Facade,你可以包装调用,它将被监控。

// At top, with other imports
use Scoutapm\Events\Span\Span;
use Scoutapm\Laravel\Facades\ScoutApm;

// Replacing the above code
$request = ScoutApm::instrument(
    'Custom',
    'Building Service Request',
    static function (Span $span) use ($version) {
        $request = new ServiceRequest();
        $request->setApiVersion($version);
        return $request;
    }
);