scoutapp/scout-apm-php

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

8.12.0 2024-06-10 07:00 UTC

README

Build Latest Stable Version Total Downloads License

通过[email protected]联系我们加入测试邀请列表!

使用Scout的PHP APM代理监控PHP应用程序的性能。

一旦安装并配置代理,就会收集详细性能指标和事务跟踪。

要求

PHP版本:7.2+

快速开始

此包是各种框架特定包的基础库。

Laravel、Lumen、Symfony支持

要为特定框架安装ScoutAPM代理,请使用特定包。

直接使用基础库

use Psr\Log\LoggerInterface;
use Scoutapm\Agent;
use Scoutapm\Config;
use Scoutapm\Config\ConfigKey;

// It is assumed you are using a PSR Logger
/** @var LoggerInterface $psrLoggerImplementation */

$agent = Agent::fromConfig(
    Config::fromArray([
        ConfigKey::APPLICATION_NAME => 'Your application name',
        ConfigKey::APPLICATION_KEY => 'your scout key',
        ConfigKey::MONITORING_ENABLED => true,
    ]),
    $psrLoggerImplementation
);
// If the core agent is not already running, this will download and run it (from /tmp by default)
$agent->connect();

// Use $agent to record `webTransaction`, `backgroundTransaction`, `instrument` or `tagRequest` as necessary

// Nothing is sent to Scout until you call this - so call this at the end of your request
$agent->send();

默认日志级别

默认情况下,该库在设计上非常嘈杂地记录日志 - 这是为了帮助我们在需要时了解出了什么问题。如果您确信一切正常,并且可以在Scout仪表板中看到数据,则可以通过添加以下配置来提高最小日志级别,以设置“最小”日志级别(仅适用于Scout的日志)

use Psr\Log\LoggerInterface;
use Psr\Log\LogLevel;
use Scoutapm\Agent;
use Scoutapm\Config;
use Scoutapm\Config\ConfigKey;

/** @var LoggerInterface $psrLoggerImplementation */

$agent = Agent::fromConfig(
    Config::fromArray([
        ConfigKey::APPLICATION_NAME => 'Your application name',
        ConfigKey::APPLICATION_KEY => 'your scout key',
        ConfigKey::MONITORING_ENABLED => true,
        ConfigKey::LOG_LEVEL => LogLevel::ERROR, // <-- add this configuration to reduce logging verbosity
    ]),
    $psrLoggerImplementation
);

PHP内部函数的监控

您可以通过启用对内部PHP函数执行的额外监控来测量那里的时间。为此,您需要从PECL安装并启用scoutapm PHP扩展,例如

$ sudo pecl install scoutapm

您可能需要将zend_extension=scoutapm.so添加到php.ini中以启用扩展。

启用扩展后,将监控PHP中特定的I/O绑定函数,例如file_get_contentsfile_put_contentsPDO->exec等。

或者,您可以从源代码安装

为Scout启用缓存

由于PHP的无状态和“无共享”架构,Scout库在每个请求上执行一些检查(例如发送有关正在运行系统的某些元数据),这些可以通过在创建代理时为Scout提供PSR-16(简单缓存)实现来消除。

use Doctrine\Common\Cache\RedisCache;
use Psr\Log\LoggerInterface;
use Roave\DoctrineSimpleCache\SimpleCacheAdapter;
use Scoutapm\Agent;
use Scoutapm\Config;
use Scoutapm\Config\ConfigKey;

/** @var LoggerInterface $psrLoggerImplementation */
$yourPsrSimpleCacheImplementation = new SimpleCacheAdapter(new RedisCache());

$agent = Agent::fromConfig(
    Config::fromArray([
        ConfigKey::APPLICATION_NAME => 'Your application name',
        ConfigKey::APPLICATION_KEY => 'your scout key',
        ConfigKey::MONITORING_ENABLED => true,
    ]),
    $psrLoggerImplementation,
    $yourPsrSimpleCacheImplementation
);

使用提供的PSR-15中间件

scoutapp/scout-apm-php版本8.1.0开始,包含PSR-15兼容的中间件,可以在PSR-15中间件兼容的框架中使用,例如Slim或Mezzio。例如,在Slim框架中

// Assumes $app is defined, e.g. an instance of `\Slim\App`
$app->add(\Scoutapm\Middleware\ScoutApmMiddleware::class);

您很可能需要在容器中定义\Scoutapm\Middleware\ScoutApmMiddleware::class。例如,如果您的容器是Laminas ServiceManager,则可以定义一个工厂,如下所示

// Assumes $serviceManager is defined, e.g. an instance of `\Laminas\ServiceManager\ServiceManager`
$serviceManager->setFactory(
    \Scoutapm\Middleware\ScoutApmMiddleware::class,
    static function (\Psr\Container\ContainerInterface $container) {
        $logger = $container->get(LoggerInterface::class);

        $agent = Agent::fromConfig(
            Config::fromArray([
                // any additional array configuration
            ]),
            $logger
        );

        return new ScoutApmMiddleware($agent, $logger);
    }
);

文档

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

支持

请联系我们[email protected]或在存储库中创建问题。