銀の光と碧い空

クラウドなインフラとC#なアプリ開発の狭間にいるエンジニアの日々

New Relic の Custom metricsと Plugin について

New Relic Advent Calendar 2015 の9日目です。

qiita.com

New Relic で監視を行っているときに標準の項目以外を監視したい場合、Custom metricsとPluginsがあります。簡単にその違いについてまとめてみました。

Custom metrics

docs.newrelic.com

Custom metricsを追加するには、Application Monitoring で監視しているアプリに対してライブラリを追加します。.NET の場合、NewRelic.Api.Agent.dllになります。つまり、APMで監視しているWebアプリのプロセス内で取得できるのが条件になります。実際にはこのような1つのメソッド呼び出しで送信できます。valueはSystem.Singleなので単精度浮動小数点になります。

NewRelic.Api.Agent.NewRelic.RecordMetric("Custom/DEMO_Record_Metric", value);

後述するプラグインとは異なり送信頻度に上限はないため、Webアプリの1トランザクションごとにAPIを呼び出しても問題ありません。ただし、メトリクスに指定するキーの種類が2000を超えるとサーバー側でキーをグルーピングする処理が入ります。

docs.newrelic.com

送信したCustom metricsは、Custom dashboardを作成してグラフを設定します。

docs.newrelic.com

価格に関しては記述が見つけられなかったのですが、Custom Dashboardが有償プランのみの機能なので、実質有償プランのみといえるでしょう。追加の課金は発生しないはずです。

newrelic.com

また、Custom metricsに限らず Api.Agent のAPIを使うと、エラー時の情報を付加情報をつけて送信できたり、トランザクションに属性を設定できたり、といろいろ便利なので一度目を通しておくのをおすすめします。

Plugins

一方Pluginsですが、こちらはHTTP POSTでデータを送信します。ライセンスキーを設定して送信すればいいだけなので実質任意のプロセスから送信できます。また何より3rd party からプラグインが多数提供されています。

newrelic.com

このラインナップを見てもわかりますが、監視プロセスを立ち上げて、自分たちのアプリ本体ではなく利用しているサービスの状態を取得して送信する、といった利用方法も可能です。

また、自分でプラグインを作成することも可能です。作ったプラグインを公開することも可能です。

docs.newrelic.com

.NET の場合は以前記事に書きました。

[http://tech.tanaka733.net/entry/2013/09/09/HTTP_API%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6_C%23%E3%81%A7_New_Relic_Plugin%E3%82%92%E4%BD%9C%E3%82%8B_1:embed:cite]

Pluginsの値を確認するのは、上の記事にもあるようにPlugin専用のページで確認します。Custom Dashboardのように有料ではありませんが、グラフを設定しないといけないのは同じです。

ただ、Pluginsの最大の制約は1分に1回しか送信できないことです。そのため、メトリクスの値を1分間まとめておいて、平均・最大・最小・二乗和などを送信するようになっています。さらに、複数のホスト(プロセス)から同一のキーに対して送信しても、まとめたりはしてくれず別々のデータとして認識されます。ですので、同じキーではなく、ホスト名を入れて送信して、グラフ側でホスト名ごとに表示する、といった対応が必要になります。

まとめ

Custom metricsとPluginsをまとめましたが、じゃあどちらを使えばいいのかというと、Custom metricsがつかえるのであればそちらがいいでしょう。Pluginsの1分に1回しか送信できないというのは困ることも多いです。Pluginsの方は、APMで監視できないような、外部のサービスなどの監視に利用できます。

また、現状どちらの方法でもうまく監視できないものとして、1分とか10分に1回起動するようなタスクスケジューラー(もしくはcron)的なバッチ処理があります。1つのプロセスの実行時間が数分程度の場合、Pluginsであってもうまくmetricsを送信できないようです。