roenschg / php-newrelic
NewRelic Agent API 的包装器,允许可靠地发送大量自定义事件。
v2.1.1
2021-06-17 15:34 UTC
Requires
- php: ^7.1
- ext-curl: *
Requires (Dev)
- ext-json: *
- escapestudios/symfony2-coding-standard: ^3.x-dev
- phpunit/phpunit: 9.x
- squizlabs/php_codesniffer: ^3.3
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