先日、サポートチケットにてお問い合わせいただいた内容について、内容を一般化してお届けしようと思います。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はこのようにさまざまなものを計測することができるようになります。ぜひ試してみてください。また、こういうことができないのか?という質問もぜひお寄せください。
The views expressed on this blog are those of the author and do not necessarily reflect the views of New Relic. Any solutions offered by the author are environment-specific and not part of the commercial solutions or support offered by New Relic. Please join us exclusively at the Explorers Hub (discuss.newrelic.com) for questions and support related to this blog post. This blog may contain links to content on third-party sites. By providing such links, New Relic does not adopt, guarantee, approve or endorse the information, views or products available on such sites.