こんにちは。金谷です。 MonotaRO内でDevOps活動を推進しています。
DevOps活動と言えば、リリースの自動化・高速化を想像されるかと思います。ですが今回の話は自動化関連の話ではありません。 今回は、DevOps活動の一つとして行った、アプリケーション監視の話について書きます。
MonotaROでは新たにDatadogを採用しました。
Datadogは統合監視プラットフォームを提供するクラウドサービスです。 Datadogエージェントを用いたホスト単位の監視では、ホストのCPU/メモリ/ディスク/ネットワークなどのメトリクス収集・監視に加え、ホスト上で動作するミドルウェアの稼働状況も監視することが出来ます。更にDatadogは、AWS, GCPを始めとしたクラウド環境のマネージドサービスの稼働状況も監視することができます*1。Datadogを用いることで、MonotaROのサービスを構成するあらゆるシステムをワンストップで監視することができるようになります。
MonotaROを支えるシステムは、今現在も継続して、NagiosとCactiによるインフラ監視を行っております。 今回の活動では、監視の仕組みとしてNagiosとCactiにDatadogを追加した形になります。
では何故Datadogを追加導入したのか? NagiosとCactiも使い続けるのは何故か? について説明します。
今までのMonotaROを支えるシステムの監視は、インフラエンジニアによるインフラ視点の監視を、Nagios + Cactiの組み合わせで行っていました。 インフラ視点の監視ですので、監視対象は主に、死活監視とCPU/メモリ/ディスク/ネットワークなどのリソース監視です。
インフラ監視は十分に機能していましたが、開発者視点で見た場合、以下の不足がありました。
- アプリケーション固有のメトリクスが取れていない
- インフラ監視のメトリクスからは何が起きているのか判断しにくい
- 開発者がNagios + Cactiを気軽に使うことができない
アプリケーション固有のメトリクスとは、例えばWebサービスの場合、秒間リクエスト数やリクエストのレイテンシーになります。 アプリケーションの状態は、アプリケーション固有のメトリクスとインフラ監視のメトリクスを組み合わせることで正しく認識できます。 例えば秒間リクエスト数とCPU使用率が両方上がっている場合、Webサービスへのトラフィックが増加しているのだと判断できますし、秒間リクエスト数はそのままでCPU使用率が上がった場合、パフォーマンス低下の実装が混入した可能性が考えられます。こういった判断が、今までは即座にできない状態でした。*2
また、Nagios + Cactiを開発者も一緒に使うことも難しい状況でした。 既存のインフラ監視に影響を与えてしまっては一大事ですので、監視項目の追加はインフラエンジニアに依頼する形で行っていました。
Datadogは、この状況を変えるための機能をすべて持っていました。
- 200以上あるインテグレーションにはNginxやApache用インテグレーションが標準で用意されており、アプリケーション固有のメトリクスが簡単に取れる
- 使い勝手の良いダッシュボードにより、アプリケーション固有のメトリクスとインフラ視点のメトリクスを同じダッシュボード上に表示して判断できる
- ダッシュボードはいくつも作ることが出来るため、各システムの関心事を表示するダッシュボードを作ることができる
これは行けると判断したDatadogの導入に当たり、 Datadogは「開発者のための開発者視点によるアプリケーション監視プラットホーム」 という位置付けを明確にした状態で導入を進めました。 既存のインフラ監視はそのまま使い続け、開発者はDatadogを用いて必要な監視をするという位置付けを決めたことにより、 開発者もインフラエンジニアも、お互い安心して導入を進めることができました*3。
Datadogを導入したことにより、開発者が感じていた不足はすべて解消されました。
今では、ダッシュボード用のモニターを購入して各チームに配布し、ダッシュボードを常時表示させています。 ダッシュボードの前で議論する姿も見られるようになりました。以下は常時表示するダッシュボードの一例です。
更にAPM(Application Performance Monitoring)も導入し、コードレベルでのパフォーマンス監視も始めました。 もう何か問題が起きた時に慌てる必要はありませんし、問題が起きる前の対処もできる状態になってきています。
MonotaROでは、Datadogを「開発者のための開発者視点によるアプリケーション監視プラットホーム」として活用しています。 活用に関するノウハウも溜まってきましたので、次回以降は具体的にどのように導入し活用しているかを書いていきます。