New Relic APM でどのプランを選ぶべきか?

アドベントカレンダー18日目。アドベントカレンダーでは、APM についての最後の記事(たぶん）。これまで、
さんざん、APM の機能について紹介してきましたが、結局、どのプランを利用するのがいいのか？ ということについて見ていきます。

New Relic APM (アプリケーションパフォーマンス監視)のどのプランを選ぶのかいいのか悩む方もいると思うので、ざっくりと違いを説明したいと思います。判断のご参考まで。

New Relic APM には、現在(2016/12) 以下3つのプランがあります。

- Lite (無料)
- Essentials (有料)
- Pro (有料)

## 各プランの比較

各プランではざっくり、以下の違いがあります。

||  Lite  |  Essential  |  Pro  |
|:-----------|:------------:|:------------:|:------------:|
| データ保持期間 (メトリックデータ) |  1日  |  3日  |  90日  |
| データ保持期間 (キーメトリクス) |  利用不可  |  制限なし  |  制限なし  |
| データ保持期間 (トレースデータ) |  1日  |  3日  |  7日  |
| データ保持期間 (Insights 用イベント) |  1日  |  3日  |  8日  |
| サポート |  コミュニティフォーラム  |  Webサイトとメール  | Webサイトとメールと(電話)  |
| パフォーマンス測定(スループット、レスポンスタイム、エラー率) |  ◯   |  ◯  |  ◯  |
| 外部サービスのパフォーマンス測定 |  ◯  |  ◯  |  ◯  |
| DB のメトリクスと SQL トレース |  ◯  |  ◯  |  ◯  |
| エラー一覧とスタックトレース | ◯ | ◯ | ◯ |
| フィルタリング可能なエラー分析と詳細のトレース |  | ◯ | ◯ |
| トランザクション単位のパフォーマンス分析と詳細分析 |  | ◯ | ◯ |
| 月単位の SLA レポートとデプロイ追跡 |   |   |  ◯  |
| JVM モニタリング |    |   |  ◯  |
| スレッドプロファイルと X−Ray セッション |    |   |  ◯  |
| New Relic Alerts (アラート通知) |    |  ◯  |  ◯  |
| サービスマップ | | |  ◯  |
| デプロイ履歴の管理 |    |    |  ◯  |
| マルチアカウント管理 |  |  |  ◯  |
| SSO/SAML 連携 | | |  ◯  |
| New Relic Insights |  |  ◯  |  ◯  |

## Essential と Pro はいくら？

Essential と Pro のざっくりした料金の違いは以下となります。（正確な情報は[公式サイト](https://newrelic.com/application-monitoring/pricing)をみてください）

APM の料金体系は、ホスト単位とクラウド用の２種類あります。また、それぞれ、年契約と月契約があります。ここでは参考までに契約の価格を載せておきます。

APM (年契約):

ホスト単位 (1ホスト)

- PRO: 150 ドル/月
- Essentials: 75 ドル/月

クラウド (1インスタンス）

- PRO: 25 - 200 ドル/月
- Essentials: 12.5 - 100 ドル/月

※ クラウドの場合は、CU (Compute Unit) という単位でインスタンスサイズなどにって変動する料金体系です。詳しくは、アドベントカレンダー15日目の「[クラウド向けの New Relic の新しい料金計算の考え方: CU(Compute Unit) とは](http://qiita.com/kumatronik/items/ef1a2b5124c8ff6704f5)」をご覧ください。

## Lite (無料版） についてのまとめ

**Lite プランでできること**

- 過去２４時間のアプリのパフォーマンス（レスポンスタイム、Apdex、スループット、エラー率）が分かる。
- 過去24時間で遅いトランザクションやデータベース処理、外部サービス呼び出しがすぐに分かる
- 例外管理ができる

**Lite プランではできないこととデメリット**

- 2４時間以上前のデータ見れない。ので、土日や祝日に問題が発生していても、平日に確認できない。
- あるトランザクションが遅いとわかっても、その原因というか具体的にどの部分(SQL や外部サービスの呼び出しなど）が遅いのかまでは見れない
- New Relic Alerts が使えないため、アラート管理機能がしょぼい


**まとめ**

データも1日分しか見れないため、Lite はお金を掛けずに、お手柄に現在のパフォーマンスを確認したい方用です。
日々のパフォーマンス監視、パフォーマンス分析、障害時の早期対応などを行いたい場合は、有料プランが現実的かと思います。

## Essential について

**Essential のメリット**

- 3日分のデータが見えるので、普通に週末明けとかに土日のパフォーマンスは確認できる
- トランザクショントレースが使えるので、パフォーマンスの遅いトランザクションに関して、SQL を確認できる
- New Relic Alerts が使えるので、柔軟なアラート管理が利用できる
- フィルタリング機能付きのエラー管理があるので、エラーの絞込が簡単に行える

**Essential のデメリット**

- ３日分のデータ保持期間のため、長期休暇があった場合にパフォーマンスを確認できない(アラートは使えるので、パフォーマンスの低下自体は知ることはできる）
- ３日分のデータ保持期間のため、傾向分析したい場合には向かない
- スレッドプロファイル（メソッド単位）でパフォーマンスを収集できる機能が利用できない
- １つのソフトウェアで複数サービスを連携している場合にはあまり向かない（というか、連携に関する機能がないので、ソフトウェアを俯瞰的に管理できない)

**まとめ**

アプリ単体のパフォーマンス管理、パフォーマンス改善をさくっとしたい場合には、向いていると思います。

## PRO について

**Pro のメリット**

- データ保持期間が長いため、パフォーマンスの傾向分析が行いやすい
- データ保持期間が長いため、長期休暇があった場合でも休み前や休み中のパフォーマンスを確認できる
- X-Ray セッションなどの、より詳細(メソッド単位）なパフォーマンスを収集できる (利用言語によっては利用できない）
- サービスマップを使うと、アプリ間の連携がわかりかつ、どのアプリのパフォーマンスが遅いか、アラートがでているかが一目瞭然のため、複数チームで複数サービスを開発しているソフトウェアには便利
- 複数部署や全く違うサービスを開発している場合に、サブアカウントを作って、そこでアカウントを管理できる
- デプロイ履歴の管理機能が使えるので、デプロイ前後のパフォーマンスを簡単に確認できる。これにより、パフォーマンス改善を行ったデプロイをした場合に、効果があったのか分かりやすいし、あるタイミングでパフォーマンスが低下したときに、その直前にデプロイしていたか簡単にわかるので、デプロイしていた場合は、そのデプロイが原因だとすぐにわかる。
- Essentials の機能は全部使える

**Pro のデメリット**

- 他のプランに比べて、料金が高い。

**まとめ**

パフォーマンスの傾向分析や、時間を追ってパフォーマンス改善に取り組みたい場合に最適なプランとなっています。複数サービスを、複数チームで連携して構築しているソフトウェアでは、パフォーマンス低下があった際に、どこのサービスが原因なのかをサービスマップを使って、簡単に把握できるし、また、Insihgts を通して、複数のアプリのデータを１つのダッシュボードに表示することもできるため、複数チームで開発している場合には、コミュニケーションコストを削減するための多くの機能があります。

## まとめ： どのプランを選ぶべきか？

１つの判断ポイントは、データ保持期間です。ざっくり以下のようになると思います。

- Lite: 24時間なので、リアルタイムにパフォーマンスを見たい場合
- Essentials: 3日なので、週末を含めた直近のパフォーマンスを把握したい場合
- PRO: 最大90日なので、パフォーマンス傾向分析をしたい場合

また、機能的な点でみると以下のようになるかと。

- Lite: 全体のパフォーマンスが見れればいい。（細かいデータは見れなくてもいい)
- Essentials: アプリ単体のパフォーマンス分析ができればいい。その他の細かいところは、自前でどうにかする。とりあえず、SQL が見れればいい。
- PRO: ソフトウェア全体（サービス連携含め）のパフォーマンスを分析したい。デプロイ履歴やスレッドプロファイルなどかゆいところに手がとどく機能が利用したい。

あとは、予算との兼ね合いになるかと。

### メモ

１つの New Relic アカウントで、複数のプランを併用して使うことはできない。なんで、もし、あるホストは有料版を使って、あるホストは無料版を使いたい場合は、めんどくさいが、別々にアカウントを取得する必要がある。