先日、サポートチケットにてお問い合わせいただいた内容について、内容を一般化してお届けしようと思います。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はこのようにさまざまなものを計測することができるようになります。ぜひ試してみてください。また、こういうことができないのか?という質問もぜひお寄せください。
Les opinions exprimées sur ce blog sont celles de l'auteur et ne reflètent pas nécessairement celles de New Relic. Toutes les solutions proposées par l'auteur sont spécifiques à l'environnement et ne font pas partie des solutions commerciales ou du support proposés par New Relic. Veuillez nous rejoindre exclusivement sur l'Explorers Hub (discuss.newrelic.com) pour toute question et assistance concernant cet article de blog. Ce blog peut contenir des liens vers du contenu de sites tiers. En fournissant de tels liens, New Relic n'adopte, ne garantit, n'approuve ou n'approuve pas les informations, vues ou produits disponibles sur ces sites.