anik/elastic-apm-php

此包已被放弃,不再维护。未建议替代包。

用于将 PHP 应用程序事务推送到 APM 服务器的 elastic/apm-agent-php 包装器

v2.1 2021-04-24 13:26 UTC

This package is auto-updated.

Last update: 2022-06-01 20:19:18 UTC


README

⚠️ 警告:包依赖 ext-elastic_apm 正处于开发模式,不时推送破坏性更改。也不建议在生产环境中使用。因此,本项目将在依赖项稳定性问题解决之前不再维护。您可以自由地分叉并相应地进行更改。或者使用任何可用的替代方案

要求

  • 该包依赖于 elastic 的 apm-agent-php 扩展。
  • php ^7.2
  • 如果想要与 Laravel 一起使用,Laravel 版本应大于等于 6.x

安装

要使用 composer 安装此包,请运行

composer require anik/elastic-apm-php

如果需要安装特定版本,请在安装时使用适当的版本。上述命令将安装最新可用的版本。

Laravel

  • 此包使用 Laravel 的自动发现功能。但是,如果您仍然想安装,那么
    1. Anik\ElasticApm\Providers\ElasticApmServiceProvider::class 添加到您的 config/app.php 文件的 providers 数组中。
    2. Anik\ElasticApm\Facades\Agent::class 添加到您的 config/app.php 文件的 facade 数组中。
    3. 运行 php artisan vendor:publish 并选择要发布的提供程序以在配置目录中发布配置文件。它将在您的配置目录中复制 elastic-apm.php

Lumen

  • 要使用 Lumen 安装此包,您不需要启用 Facade
  • 在您的 bootstrap/app.php 中注册服务提供程序,使用 $app->register(Anik\ElasticApm\Providers\ElasticApmServiceProvider::class);
  • 如果您想更改配置,请将 elastic-apm.phpvendor/anik/elastic-apm-php/src/config/elastic-apm.php 复制到您的 config/app.php 文件。
  • 在您的 bootstrap/app.php 中注册复制的配置文件 $app->configure('elastic-apm')

使用方法

错误跟踪

如果您想记录错误,那么

  • 对于 Laravel,在您的 bootstrap/app.php 中,
// COMMENT THIS SECTION
$app->singleton(
    Illuminate\Contracts\Debug\ExceptionHandler::class,
    App\Exceptions\Handler::class
);
// USE THIS SECTION FOR LARAVEL <= 7
$app->singleton(Illuminate\Contracts\Debug\ExceptionHandler::class, function ($app) {
    return new Anik\ElasticApm\Exceptions\Handler(new App\Exceptions\Handler($app), [
        // NotFoundHttpException::class, // (1)
        // ConnectException::class, // (2)
    ]);
});
// USE THIS SECTION FOR LARAVEL >= 8
$app->singleton(Illuminate\Contracts\Debug\ExceptionHandler::class, function ($app) {
    return new Anik\ElasticApm\Exceptions\HandlerThrowable(new App\Exceptions\Handler($app), [
        // NotFoundHttpException::class, // (1)
        // ConnectException::class, // (2)
    ]);
});
  • 对于 Lumen,在您的 bootstrap/app.php 中,
// COMMENT THIS SECTION
$app->singleton(
    Illuminate\Contracts\Debug\ExceptionHandler::class,
    App\Exceptions\Handler::class
);
// USE THIS SECTION FOR LUMEN <= 7
$app->singleton(Illuminate\Contracts\Debug\ExceptionHandler::class, function ($app) {
    return new Anik\ElasticApm\Exceptions\Handler(new App\Exceptions\Handler(), [
        // NotFoundHttpException::class, // (1)
        // ConnectException::class, // (2)
    ]);
});
// USE THIS SECTION FOR LUMEN >= 8
$app->singleton(Illuminate\Contracts\Debug\ExceptionHandler::class, function ($app) {
    return new Anik\ElasticApm\Exceptions\HandlerThrowable(new App\Exceptions\Handler(), [
        // NotFoundHttpException::class, // (1)
        // ConnectException::class, // (2)
    ]);
});

请求响应跟踪

如果您想记录应用程序接收和服务的请求,

  • 对于 Laravel,在您的 App\Http\Kernel 的中间件中添加 Anik\ElasticApm\Middleware\RecordForegroundTransaction 类。
<?php

class Kernel extends HttpKernel {
    protected $middleware = [
        // ...
        \Anik\ElasticApm\Middleware\RecordForegroundTransaction::class,
        // ..
    ];
}
  • 对于 Lumen,在您的 bootstrap/app.php 文件中添加 Anik\ElasticApm\Middleware\RecordForegroundTransaction 类。
$app->middleware([
    // ...
    \Anik\ElasticApm\Middleware\RecordForegroundTransaction::class,
    // ...
]);

后台作业跟踪

对于 Laravel 和 Lumen,您需要在作业的中间件中添加 Anik\ElasticApm\Middleware\RecordBackgroundTransaction 类。

HTTP 调用跟踪

要跟踪 HTTP 调用,您需要使用 Guzzle。可以将 RecordHttpTransaction 类作为 Guzzle 的处理程序堆栈。它将记录 HTTP 调用。

$stack = \GuzzleHttp\HandlerStack::create();
$stack->push(new \Anik\ElasticApm\Middleware\RecordHttpTransaction(), 'whatever-you-wish');

$client = new \GuzzleHttp\Client([
    'base_uri' => 'http://httpbin.org',
    'timeout'  => 10.0,
    'handler'  => $stack,
]);
$client->request('GET', '/');

文档

请查看项目描述中的给定 URL,以全面了解您可以使用它做什么。以及如何自定义它。

提交请求(PR)?

如果您发现任何错误并进行更新,请确保您发送一个提交请求(PR)。提交请求总是受到欢迎。