対象者
システム開発チーム、システム運用チーム、SRE
効果
リアルユーザーの体感しているサービスのパフォーマンスを計測する意味でBrowser, Mobileから直接呼び出されるアプリケーションのレスポンスタイムをNew Relic APMで測定することは重要です。しかし、サーバーサイドアプリケーションはこのようなWebリクエスト-New Relicでは Webトランザクションと呼びます-だけで構成されているわけではありません。cronやタスクスケジューラーから呼び出される定期バッチ処理に代表されるバックグラウンドプロセスが正しく動いていることを計測することも重要です。最近では、kubernetesのcronjobであったり、クラウドサービスでスケジュール実行あるいはイベントからのトリガー実行であったり、様々な場所でこのようなバックグラウンドプロセスが実行されます。New Relicではこのようなバックグラウンド処理をnon-Webトランザクションとして計測することが可能です。
バックエンドプロセスは、通常直接リアルユーザーのパフォーマンスに関与しないため、apdexの評価からは外されます。しかし、New Relic APMで計測することによりその経過時間の統計情報、トランザクションの詳細、エラー分析といったWebトランザクションと同様の機能で分析することが可能になります。
New Relic 製品
New Relic APM
実装方法
New Relic APMは多くの言語、フレームワークをサポートしており、Webトランザクションを自動で検出することが可能です。しかし、バックグラウンドプロセスをnon-Webトランザクションとして検出するためにはcustom instrumentationの設定を行う必要があります。さらに、プロセス自体は1分未満で終了するような場合、Javaや.NETではプロセス終了時に計測データを送信するための設定が必要になります。また、PythonやRubyでも短命プロセスの場合に考慮が必要なことがあります。これらの設定は言語のAgentによって異なります。ここでは各言語での設定を説明しているドキュメントを紹介します。
C SDK
トランザクションをインストゥルメントするを参考にしてください。
Go
Monitor a transactionを参考にしてください。
Java
Javaでのcustom instrumentationはNew Relic UI, XML設定ファイル, メソッドへのアノテーション付与の三通りの方法があります。Javaカスタムインストゥルメンテーションを参考にお好みの方法を選択してください。また、プロセスが1分未満で終了する場合、Java Agentの設定で、send_data_on_exit
をtrue
に、send_data_on_exit_threshold
をプロセスの最短継続時間より短い秒数に指定してください。
.NET
まず、Windows向けに.NET Framework Agentを利用している場合、インストール時にすべてのインストゥルメントを有効化してください。これを有効化しないと、IISでホストされていないバッチ処理などのプロセスが計測対象になりません。詳細はインストール手順のドキュメントを参照ください。この手順は.NET CoreのAgentでは不要です。
次に、.NETのcustom instrumentationはXML設定ファイル,メソッドへの属性付与の二通りの方法があります。.NETカスタムインストゥルメンテーションの概要を参考にお好みの方法を選択してください。
最後に、.NET Agentの設定で、sendDataOnExit
をtrue
にsendDataOnExitThreshold
をプロセスの最短継続時間より短いミリ秒数に指定してください。
Monitor short-lived .NET processesも合わせてご確認ください。
Node.js
バックグラウンドトランザクションをインストゥルメントするを参考にし、startBackgroundTransaction
APIを利用してください。
PHP
newrelic_background_job APIを利用してください。PHPエージェントは、コマンドラインで実行されるスクリプトを、すべて非ウェブトランザクションとしてレポートします。
Python
Python Agentのnon-Web トランザクションをご覧ください。特に短命プロセスで起動時にstartup_timeout
を設定するもしくはregister_application
APIを使って強制的にAgentの登録を完了させること、shutdown_timeout
を設定して終了時にデータ送信のタイムアウトを設定することにご注意ください。
Pythonエージェントは、CeleryとGearmanからのnon-Web トランザクションレポートにも対応しています。
Ruby
Rubyエージェントのnon-Web トランザクションをご覧ください。特に短命プロセスの場合、 manual_star APIを:sync_startup => true
を指定して利用することにご注意ください。
このように、言語ごとのAgentによって設定が異なるため複数言語を扱う方に取っては混乱を招くこともあるかもしれません。しかし、よりそれぞれの言語での使い勝手がよくなるように改善していますので、ぜひ詳細を確認して試して見てください。
New Relic 担当者にもう少し話を聞いてみたい場合はこちらまで!
本ブログに掲載されている見解は著者に所属するものであり、必ずしも New Relic 株式会社の公式見解であるわけではありません。また、本ブログには、外部サイトにアクセスするリンクが含まれる場合があります。それらリンク先の内容について、New Relic がいかなる保証も提供することはありません。