先日、サポートチケットにてお問い合わせいただいた内容について、内容を一般化してお届けしようと思います。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はこのようにさまざまなものを計測することができるようになります。ぜひ試してみてください。また、こういうことができないのか?という質問もぜひお寄せください。
이 블로그에 표현된 견해는 저자의 견해이며 반드시 New Relic의 견해를 반영하는 것은 아닙니다. 저자가 제공하는 모든 솔루션은 환경에 따라 다르며 New Relic에서 제공하는 상용 솔루션이나 지원의 일부가 아닙니다. 이 블로그 게시물과 관련된 질문 및 지원이 필요한 경우 Explorers Hub(discuss.newrelic.com)에서만 참여하십시오. 이 블로그에는 타사 사이트의 콘텐츠에 대한 링크가 포함될 수 있습니다. 이러한 링크를 제공함으로써 New Relic은 해당 사이트에서 사용할 수 있는 정보, 보기 또는 제품을 채택, 보증, 승인 또는 보증하지 않습니다.