なぜ、Heroku Metricsの監視ではなく、Hosted Graphiteを使用するのか

#はじめに

現在、Herokuは大企業から小規模まで幅広い企業のデベロッパーによって利用されています。Herokuを利用して、アプリの構築し、運用している方もきっと多いはずです。

では、皆さんHerokuで運用しているアプリはどのようにして監視していますか？
多くの方が、Herokuの標準機能として用意されたHeroku Metricsを利用しているのではないかと思われます。

実際、Heroku Metricsは、ほとんど導入コストなしに、アプリケーションのパフォーマンス監視ないし必要に応じた通知を行える機能も装備され、メトリクス監視を行えるようになっています。ただし、本当にHeroku Metricsで充分な監視が行えるのでしょうか？　答えは否です。

この記事では、Heroku Metricsがなぜ充分な監視と言えないのかを説明していきます。そして、Heroku Metricｓの代替案として期待できるHerokuのアドオンでもある、[MetricFire](https://www.metricfire.com/japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Why%20not%20Heroku%20Metrics%20but%20Hosted%20Graphite)が提供する[Hosted Graphite](https://elements.heroku.com/addons/hostedgraphite?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Why%20not%20Heroku%20Metrics%20but%20Hosted%20Graphite)がなぜ監視していく方法として優れているのかを解説していきたいと思います。Hosted Graphiteについてさらに詳しく知りたい方は、[デモを予約](https://www.metricfire.com/demo-japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Why%20not%20Heroku%20Metrics%20but%20Hosted%20Graphite)することをお勧めします。

#Heroku Metricsの問題点と[Hosted Graphite](https://elements.heroku.com/addons/hostedgraphite?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Why%20not%20Heroku%20Metrics%20but%20Hosted%20Graphite)が解決策になる理由

##1. データの保管期間

Heroku Metricsのデータ保存期間は、過去7日間分です。これが何を表しているかというと、7日前以前のデータ見ることが出来ないということです。このデータ保存期間が短いことで起こりうる問題や欠点は以下の通りです。

- 何か変更を加えた際のパフォーマンスの変化を１週間前のデータと比較できない

- インシデントが起きた際に、通常の状態に戻ったかどうかを確認できない
- １週間データを見ていなかった際、過去に遡れない
- データを長期的に観察、比較することが出来ないため、データの将来的な推移（トレンド）が予想できない

これらの問題は、デベロッパーにとっては、致命的な問題となることもありますので、決して7日分のデータを確認する監視で満足してはなりません。

###Hosted Graphiteのデータ保持期間について

Hosted Graphiteを使用した場合、データの保持期間については、プランによって異なります。以下の表を参考にしてください。

| Plan | データ保持期間 | 
|:-----------|------------:|
| $29       | 14日間        | 
| $99     | 60日間     | 
| $299      |  365日間      | 
| $649　〜         | 730日間 〜     |

一番下の$29ドルのプランでは１４日間のデータ保持期間ということで、あまり満足はできないかもしれませんが、それ以上のプランでは、かなりんも長期間のデータ保持をサポートしています。これにより、上で提起された問題については解決できるはずです。

##2. データの解像度

Heroku Metricsのデータの解像度は以下の図の通りです。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/18b4715b-c339-3d34-223a-304109456df6.png" width=25%>
過去2時間分のデータは1分間隔のデータポイント表示で見ることはできますが、2時間以上の前のデータに関しては、解像度が一気に下がって１０分間間隔になります。さらに、３日間が経つと1時間間隔の解像度となり、これではまともな監視が行えなくなります。

ある障害が発生して解決しようとしたが、3日以上経ってしまっている場合は、実際にどんな問題が起こったかの把握も難しくなるでしょう。

###Hosted Graphiteのデータ解像度について

Hosted Graphiteを使用した場合、データの解像度についても、プランによって異なります。以下の表を参考にしてください。

| Plan | データ解像度　24時間 | データ解像度　24時間〜72時間 | データ解像度　７２時間〜180日 |　データ解像度　180日〜２年間 |  
|:-----------|------------:|------------:|------------:|------------:|
| $29       | ３０秒間隔        | ３０秒間隔        | 5分間隔        | NA        |
| $99     | ３０秒間隔     | ３０秒間隔        | 5分間隔        | NA         |
| $299      |  ３０秒間隔        | ３０秒間隔        | 5分間隔        | 1時間間隔        |
| $649　〜         | 5秒間隔    |３０秒間隔        | 5分間隔        | 1時間間隔        |

上記のデータ表をご覧いただければお分かりいただけるように、差は歴然です。過去180日のデータも5分間隔のデータポイント表示を可能としているので、かなり詳細な監視を長期間に渡って可能としています。
また、180日以前のデータは1時間間隔となってしまいますが（それでも充分ですが）、Hosted Graphiteが持つ[データビュー機能](https://qiita.com/MetricFire/items/39919f0ccecfb054a2e6)を使用し、データのMax値やMin値などを確認すれば、どこでスパイクが起こったのかも詳細に確認することが出来るようになります。

##3. アラート

Heroku Metricsのアラートはとても限られているのが実情です。しきい値を設定してアラートを飛ばすことが出来るのは、レスポンスタイムの95 パーセンタイルの上限と、失敗したリクエストの割合のみとなっており、ほぼアラートとして使うことができません。
要するに、メモリ使用率などにしきい値を設定したくても出来ないということであり、常にユーザーがチェックしておくということが必要になるということです。

###Hosted Graphiteのアラートについて

Hosted Graphiteのアラート設定は非常にフレキシブルです。もちろん、２つの機能にしかしきい値を設定できないなんてことはありません。

また、しきい値の設定もかなり柔軟で、データがこれ以上または以下などで設定できたり、PagerdutyやSlackなどの通知方法もアラートごとによって設定できるなど、大きな利点があります。

![スクリーンショット 2020-12-17 11.08.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/d298bd24-8bae-c9bb-e2ff-b2058a36c5d1.png)

やはり、アラートがあるとないとでは、監視に割く時間も大きく変わってくることですので、大いに検討するべきポイントであるはずです。

##4.　ダッシュボードで可視化

Heroku Metricsを利用した際のダッシュボードは以下の通りです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/fb989a85-b1cf-f0d0-08b6-46b8acf3ffe5.png)

綺麗に可視化されているので、そこまで不便に感じることもないかもしれません。ただ、その意見もHosted Graphiteを試した後だったら、変わってしまうかもしれません。

###Hosted Graphiteの可視化について

Hosted Graphiteでは、Grafanaにて可視化されます。Grafanaの一番の魅力として、やはりそのカラフルで美しい見え方にあります。

![スクリーンショット 2020-12-17 11.27.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/c070eb57-dd73-2ac9-8397-d27ec8ee2a0f.png)

このカラフルでクールなダッシュボードには、エンジニアとして惹かれるものがあります。また、Grafanaのダッシュボードを使用することで、Heroku Metricsでは実現できなかったことが出来るようになります。

- グラフを自由自在にカスタマイズ可能
- **時間をフィルタリングして、ズームアップが可能**
- 使用を始めると上記のようなグラフが自動的に作成される

また、Hosted Graphiteにメトリックを保存することにより、メトリックを統合、集約、要約のために開放して、Cxxレベルまたは全社的なメトリック（SLAなど）などの可視性を以下のようにして高めることができます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614998/b41d242b-ab73-0fbb-3894-55e2ed99e9e0.png" width=30%>
これらの機能を使うことで、今までとは、ひと味違った監視を行えるようになるはずです。

#Hosted Graphiteを実際に導入

HerokuでHosted Graphiteのアドオンを利用したい方は、まずは[HG Heroku Monitoring & Dashboardsページ](https://elements.heroku.com/addons/hostedgraphite#pricing)へ。

インストールしたら、早速herokuのデータをHosted Graphiteに送り始めましょう。その方法については、[こちらのドキュメント](https://www.metricfire.com/docs/heroku/)をご参考にしてください。

この操作を終えて、Grafanaのダッシュボードのテンプレートが表示されない場合は、[ダッシュボード作成のプロセス](https://qiita.com/MetricFire/items/8baec2bfcf17a379bc36)も行ってください。

これら全てのプロセスは非常に簡単で約10分ほどで完了することができるはずです。
また、もしサポートが必要な際や、プラットフォームを紹介してもらいたい時は、[デモを予約](https://www.metricfire.com/demo-japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Why%20not%20Heroku%20Metrics%20but%20Hosted%20Graphite)することもできます。サポート体制も充実しており、すぐに力を貸してくれるでしょう。

#まとめ

Heroku MetricsはHerokuの標準機能として無料で使用できるのは大きな魅力です。ただ、本格的な監視としては、その機能にはまだまだ満足できないかもしれません。[MetricFire](https://www.metricfire.com/japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Why%20not%20Heroku%20Metrics%20but%20Hosted%20Graphite)の提供する[Hosted Graphite](https://elements.heroku.com/addons/hostedgraphite?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Why%20not%20Heroku%20Metrics%20but%20Hosted%20Graphite)を使用すれば、データの保持期間、解像度、アラート、可視化に関してより良い機能が利用でき、監視の質を飛躍的に高めてくれることでしょう。

[Hosted Graphite]([Hosted Graphite](https://elements.heroku.com/addons/hostedgraphite?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Why%20not%20Heroku%20Metrics%20but%20Hosted%20Graphite))で気になる点や他の機能についても知りたい方、早速始めてみたいけど不安な方は、とりあえず[デモを予約](https://www.metricfire.com/demo-japan/?utm_source=blog&utm_medium=Qiita&utm_campaign=Japan&utm_content=Why%20not%20Heroku%20Metrics%20but%20Hosted%20Graphite)してみてください。サポート人員が快く対応してくれます。