New Relic は、 New Relic PHP エージェント バージョン 7.0 以降を使用して、 Guzzle HTTP クライアント ライブラリ のバージョン 3、4、5、6、および 7 をサポートします。
Guzzle ライブラリでは、シーケンシャルおよびパラレルの両方のリクエストが可能です。このページでは、New Relic UI の Summary page で、それぞれのタイプのリクエストがどのように表示されるかを説明しています。どのコールが最も遅かったかを知るには、個々の外部コールのタイミングを表示する External Services ページ をご覧ください。
連続したリクエスト
このPHPコードは、Guzzleで複数のシーケンシャルなリクエストを行います。
$client = new \GuzzleHttp\Client;$response = $client->get('http://YOUR_SITE.com/api/foo');$client->delete('http://YOUR_SITE.com/api/foo/'.$response->getBody());
このコードは、New RelicのUIに次のように表示されます。
one.newrelic.com >All capabilities > APM & services > (アプリを選択) > Overview > Web transactions time: New Relic UI の Guzzle を使用した連続リクエスト。
応答時間は紺色の線で示されています。緑のWeb外部時間は、Guzzleライブラリで費やされた時間を表します。リクエストは順番に行われたため、応答時間はPHP、MySQL、およびWebの外部アクティビティに費やされた合計時間と同じです。
並列リクエスト
このPHPコードは、プロミスの配列をアンラッピングすることで、複数のリクエストを並行して行います。
$client = new \GuzzleHttp\Client;
$promises = [ $client->getAsync('http://YOUR_SITE.com/api/foo'), $client->getAsync('http://YOUR_SITE.com/api/bar'), $client->getAsync('http://YOUR_SITE.com/api/quux'),];
\GuzzleHttp\Promise\unwrap($promises);
このコードは、New RelicのUIに次のように表示されます。
one.newrelic.com >All capabilities > APM & services > (アプリを選択) > Summary > Web transactions time: New Relic UI の Guzzle を使用した並列リクエスト
緑色の web external の時間 は、Guzzle ライブラリに費やされた時間を表しています。リクエストは非同期に実行されたため、 PHP、MySQL、web externalに費やされた合計時間 は、 応答時間よりも大きい 。
Guzzle 6 と 7 のタイミング
以前のバージョンとは異なり、Guzzle 6 および 7 はリクエストの送信時にイベントを生成しません。代わりに、エージェントはリクエスト オブジェクトの作成時にリクエストのタイミングを開始します。リクエストオブジェクトが作成され、送信前に追加の作業が行われた場合、New Relic はリクエストに実際よりも時間がかかったと報告することがあります。
ガズルのサポートを無効にする
ガズルのサポートを無効にするには
newrelic.guzzle.enabled = false
をnewrelic.ini
ファイルに追加します。- Webサーバー (Apache、Nginx、PHP-FPMなど)を再起動します。