New Relicを導入するとアプリケーションやインフラストラクチャ、クライアントサイドの性能を分析するための重要な情報を収集することができ、可視化やアラートによって問題の検知を可能にします。例えば、アプリケーションの場合、トランザクション全体の処理時間や内部のコンポーネントの処理時間の内訳、リクエストやレスポンスのヘッダ情報などが収集する情報にあたります。これらを有効に加工し、利用することで問題の検知や原因特定の時間を大幅に短縮することができます。
一方、性能の分析や問題の原因・影響範囲の特定をさらに精緻に行うために、アプリケーション固有の情報を活用することが必要になってくる場合があります。例えば、有料会員制のサイトであれば有償・無償ユーザ毎に利用傾向の分析やユーザエクスペリエンスの計測をしたいでしょう。B2Bのサービスであれば特定顧客ごとの分析が必要になります。
New Relicは、冒頭に説明した共通的な情報に加え、カスタムでアプリケーション固有の情報を追加できるようにすることにより、上記の課題の解決をサポートします。また、アプリケーション固有の情報を活用することによって性能の分析や問題の分析を精緻にできるようになるだけでなく、より価値のある情報を提示することによってビジネス上の意思決定に貢献したり、新たなインサイトを与えることができるようになります。
New Relic 製品
New Relic APM, Browser, Infrastructure, One
実現方法
今回は、New Relic APMが収集するトランザクションの情報にカスタムの情報(カスタムアトリビュート)を追加し、それらを活用して性能分析する例をご紹介します。利用する言語はJavaです。今回ご紹介するコードはGitHubにあります。
やり方は非常に簡単です。以下がユーザからのリクエストを受け付けるサーバーサイドのコントローラのコードですが、NewRelicのSDKに含まれるaddCustomParameterメソッドを呼び出すだけで、指定したKey-Valueをカスタムアトリビュートとしてトランザクションの情報に追加することができます。なお、今回は簡単のためHTTPリクエストに指定されたクエリパラメタ(name)の値を単純に"attr_name"というカスタムアトリビュートに追加することにします。
package com.nrlabs.custominstruments.controller;
import com.newrelic.api.agent.NewRelic;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class APMCustomAttributeController {
@RequestMapping("/apm_custom_attribute")
public String apm_custom_attribute(@RequestParam("name") String name) {
NewRelic.addCustomParameter("attr_name", name);
return "apm_custom_attribute";
}
}
上記のコントローラに対して以下の3パターンでアクセスしてみます。赤字で記述した部分が呼び出し毎に変わるカスタムアトリビュートの部分です。
- http://xx.xx.xx.xx/apm_custom_attribute?name=a
- http://xx.xx.xx.xx/apm_custom_attribute?name=bb
- http://xx.xx.xx.xx/apm_custom_attribute?name=ccc
APMの画面にてトランザクションの詳細情報を見てみると、Transaction attributesとして今回追加したカスタムアトリビュート("attr_name")が追加されているのが確認できます。
今度はNRQL (New Relic Query Language)を使って実際にトランザクションの情報を確認してみてみます。トランザクションの情報はTransactionイベントとしてNRDB(New Relic Database)に格納されます。以下の画像の通り、各トランザクションの情報としてカスタムアトリビュートが追加され、保存されていることが確認できました。Transactionイベントのその他の情報についてはドキュメントを参照ください。
では、今回追加したカスタムアトリビュートを活用してチャートを作ってみましょう。
まずは、トランザクションのレスポンスタイムの平均です。APMがデフォルトで提供しているチャートでは、トランザクション横断での平均や各トランザクションの平均がわかりますが、ここではさらにカスタムアトリビュートの値毎にグルーピングしてトランザクションの平均を出しています。これにより、例えば、会員サイトの有料会員やB2Bサービスの重要顧客など、特に性能を保証しなければならないユーザへの影響を正確に把握することが可能になります。
NRQL: FROM Transaction SELECT average(duration) facet attr_name since 30 minutes ago timeseries
次はリクエスト数の合計です。こちらもカスタムアトリビュートの値毎にリクエスト数の合計を分けて表示しています。これにより、例えば、バックエンドのサービスのサイジングが妥当なのか、マーケティングの施策が機能しているか(ユーザの利用に反映されているか)を判断するためのインサイトを得ることができます。
NRQL: FROM Transaction SELECT count(*) facet attr_name since 30 minutes ago
最後に
今回はJavaのアプリケーションを対象にカスタムアトリビュートをプログラム中で付与する例をご紹介しました。Node.jsやPHP、Rubyなど、New Relicがサポートする他の言語でも同様にカスタムアトリビュートを付与することが可能です。また、言語によってはプログラム修正する必要なく、設定ファイルで定義することなども可能です。詳細はドキュメントを参照ください。
また、追加できるカスタムアトリビュートは今回の例のものだけでなく、データベースに格納されている値や売り上げなどのビジネス上の情報など様々ですし、その加工・ビジュアライズの仕方も自由です。また、APMだけでなく、InfrastructureやBrowser、MobileなどNew Relicがカバーする全てのエリアでカスタムアトリビュートによる価値を発揮することができます。
固有のカスタムアトリビュートを追加して、問題分析の効率化やビジネス視点での情報可視化を試みてください。
New Relicを試してみたい方はこちらへ。
本ブログに掲載されている見解は著者に所属するものであり、必ずしも New Relic 株式会社の公式見解であるわけではありません。また、本ブログには、外部サイトにアクセスするリンクが含まれる場合があります。それらリンク先の内容について、New Relic がいかなる保証も提供することはありません。