先日、サポートチケットにてお問い合わせいただいた内容について、内容を一般化してお届けしようと思います。New Relic APMではサポートされているフレームワークを使っている場合はデフォルトで計測できますが、そうでない場合はコード追加が必要になることがあります。その一例として、node.js でsocket.io を使っている場合があります。今回は、socket.io を使ってWebSocket通信をしており、WebSocketのハンドラ内でioredisライブラリを使ったRedis呼び出しまで含めて計測する方法を紹介します。
socket.ioを使って書いたWebScoketのハンドラ内でioredisを使って通信するサンプルコードをgistに用意しました。docker-compose.yamlもあわせて公開しているので、docker composeを使うとすぐに起動できるはずです。
さて、node.js APM Agentでのcustom instrumentationのドキュメントにsocket.ioを計測するサンプルコードが記載されています。基本的にはsocketのハンドラー関数内で、startWebTransaction
関数で元の処理をラップすることになります。追加したコードはこのようになります。
startWebTransaction
関数の第一引数はトランザクション名を指定しますが、socket.ioの場合はイベント名を指定するのがわかりやすくなるでしょう。
このようにしたアプリを起動しリクエストを投げてみましょう。
無事にWebSocketのハンドラを計測できています。
Summaryを見ればわかるようにioredisはサポートされているライブラリなので、トランザクションが計測できていればioredisによるRedis呼び出しも自動で計測されます。
Transaction Traceで個別のトランザクションでのRedis呼び出しにかかった時間も計測できます。
このようにしてWebSocketとRedis呼び出しの組み合わせも計測することができます。custom instrumentationはこのようにさまざまなものを計測することができるようになります。ぜひ試してみてください。また、こういうことができないのか?という質問もぜひお寄せください。
Die in diesem Blog geäußerten Ansichten sind die des Autors und spiegeln nicht unbedingt die Ansichten von New Relic wider. Alle vom Autor angebotenen Lösungen sind umgebungsspezifisch und nicht Teil der kommerziellen Lösungen oder des Supports von New Relic. Bitte besuchen Sie uns exklusiv im Explorers Hub (discuss.newrelic.com) für Fragen und Unterstützung zu diesem Blogbeitrag. Dieser Blog kann Links zu Inhalten auf Websites Dritter enthalten. Durch die Bereitstellung solcher Links übernimmt, garantiert, genehmigt oder billigt New Relic die auf diesen Websites verfügbaren Informationen, Ansichten oder Produkte nicht.