roenschg/php-newrelic

NewRelic Agent API 的包装器,允许可靠地发送大量自定义事件。

v2.1.1 2021-06-17 15:34 UTC

This package is auto-updated.

Last update: 2024-09-17 22:42:44 UTC


README

此包提供了一个简单且干净的包装器,围绕 newrelic APM 代理 API,同时也允许您将大量自定义指标发送到 newrelic 而不会丢失任何数据。

安装

composer require groensch/php-newrelic

基本用法

您有一个类,它作为 PHP 代理 API 定义的每个函数的包装器。

$newRelic = new Groensch\NewRelic\Handler(new Groensch\NewRelic\CustomEventHandler\PHPAgent());

$newRelic->nameTransaction('MyCustomTransactionName');
$newRelic->recordCustomEvent('eventName', ['count' => 20]);

交叉手指(代替使用 extension_loaded('newrelic'))

CrossedFingers 处理器允许您在不安装 NewRelic 扩展的环境中使用相同的方法,而不会抛出错误。因此,在您想要发送事件的每一行,而不是这样做

if (extension_loaded('newrelic')) { // Ensure PHP agent is available
    newrelic_name_transaction("/Product/view/");
}
$newRelic = new Groensch\NewRelic\Handler(
    new \Groensch\NewRelic\CustomEventHandler\CrossedFingers(),
    new \Groensch\NewRelic\TransactionHandler\CrossedFingers()
);

$newRelic->nameTransaction('MyCustomTransactionName');
$newRelic->recordCustomEvent('eventName', ['count' => 20]);

如果扩展不存在,则不会执行任何操作。

HTTP 批量发送(可靠地发送大量自定义事件)

如果您需要确保即使达到代理的限制,也要将所有数据发送到 NewRelic,则可以使用 CustomEventHandler AutoBulkHttp

请注意,这意味着由于记录的自定义事件,您的应用程序将因发送到 NewRelic 的请求数量而变慢。

以下代码演示了如何设置 NewRelicHandler 以通过 API 发送自定义事件,并自动批量打包请求。

use Groensch\NewRelic\Handler as NewRelicHandler;
use Groensch\NewRelic\HttpInsertApi as NewRelicHttpInsertApi;
use Groensch\NewRelic\CustomEventHandler\AutoBulkHttp as NewRelicCustomEventBulkHttpHandler;
    
// Configure NewRelic handler
$newRelicHttpApi = new NewRelicHttpInsertApi(NEW_RELIC_API_ACCOUNT_ID, NEW_RELIC_API_INSERT_KEY);
$newRelicCustomEventHandler = new NewRelicCustomEventBulkHttpHandler($newRelicHttpApi);
$newRelic = new NewRelicHandler($newRelicCustomEventHandler);
    
// Record custom event
$newRelic->recordCustomEvent('test1', ['recorded' => (string) time()]);
$newRelic->recordCustomEvent('test2', ['recorded' => (string) time()]);

NewRelicHttpInsertApi 负责连接到 InsightAPI,而 NewRelicCustomEventBulkHttpHandler 负责批量打包自定义事件,并了解 API 限制。

如果包足够大,它将刷新缓冲区并将请求发送到 insights API。在您应用程序关闭时,缓冲区也会被清除。

如果您传递给方法 recordCustomEvent 的数据无效或过大,您将收到一个异常。

方法列表

有关方法的更多信息,请参阅 NewRelic 文档

  • recordCustomEvent(...)
  • addCustomParameter(...)
  • backgroundJob(...)
  • captureParams(...)
  • customMetric(...)
  • disableAutorum(...)
  • endOfTransaction(...)
  • endTransaction(...)
  • ignoreApdex(...)
  • ignoreTransaction(...)
  • nameTransaction(...)
  • noticeError(...)
  • recordDatastoreSegment(...)
  • setAppname(...)
  • setUserAttributes(...)
  • startTransaction(...)
  • getTransactionHandler(...)
  • setTransactionHandler(...)

运行单元测试

docker-compose run php composer install
docker-compose run php vendor/bin/phpunit

运行代码扫描器

docker-compose run php composer install
docker-compose run php vendor/bin/phpcs --config-set installed_paths vendor/escapestudios/symfony2-coding-standard
docker-compose run php vendor/bin/phpcs