先日、サポートチケットにてお問い合わせいただいた内容について、内容を一般化してお届けしようと思います。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はこのようにさまざまなものを計測することができるようになります。ぜひ試してみてください。また、こういうことができないのか?という質問もぜひお寄せください。
As opiniões expressas neste blog são de responsabilidade do autor e não refletem necessariamente as opiniões da New Relic. Todas as soluções oferecidas pelo autor são específicas do ambiente e não fazem parte das soluções comerciais ou do suporte oferecido pela New Relic. Junte-se a nós exclusivamente no Explorers Hub ( discuss.newrelic.com ) para perguntas e suporte relacionados a esta postagem do blog. Este blog pode conter links para conteúdo de sites de terceiros. Ao fornecer esses links, a New Relic não adota, garante, aprova ou endossa as informações, visualizações ou produtos disponíveis em tais sites.