AWS
スタートアップ向け監視設計入門
Image from Datadog
はじめに
こんにちは。エンジニアのみかみです。DevOpsを推進するための、ビルドツール、CI、監視系の設計や管理ツールの作成を担当しています。インフラエンジニアっぽいですが、実際はチーム内の困ったを拾うキャッチャーで、よろず相談屋をやっています。
さて、今回は監視についてのお話です。
最近、安価で柔軟に使えるクラウドサービスが提供され、新規サービスの開発が容易になりました。
しかし、サービスをリリースしたものの、ある程度サービスが認知されてくると突然システムが故障したり、予期せぬ不具合が突然発生して困ったことはないでしょうか? サービスを100%の稼働を保証することは技術的に難しく、大抵年間99.9%の稼働率保証ですが、これでも年に9時間は停止する計算になります。100%の動作保証が難しいのならば、何時停止したとしても、すぐに発見して、対策を取れる体制を作っておくのが現実的です。
そこで、どのようにシステムの状態を把握したらよいのか、システムをモニタリングするための3ステップを考えてみましょう。
ステップ1 【WHY】なぜモニタリングするのか?
なぜモニタリングする必要があるのか?
モニタリングの設定をしていないとどんな問題が起きるのでしょうか?
私が過去に体験した、現場で発生したよくあるトラブル事例をご紹介したいと思います。
- ログインできない
- サービスが落ちている
- Webサイトが重たい
- ファイルがアップロードできない
ユーザーからこんなクレームを度々聞いたことがある人も多いのではないでしょうか?これらユーザーからの声を聞くと経験者は頭の中にこんなことをイメージします。
ログインができない
- ユーザー情報が正しいか?
- パスワードを間違えていないか?
- 認証サーバーに接続できているか?
- ユーザー情報が格納されているデータベースに接続できているか?
サービスが落ちた
- 接続する先のドメインが正しいか?
- URLが間違っていないか?
- DNSが落ちていないか?
- ロードバランサーに接続できているか?
- ウェブサーバーに接続できているか?
- アプリケーションサーバーに接続できているか?
Webサイトが重たい
- CPU利用率は?
- LoadAverageは?
- ディスクアクセスは?
- どこかで待ち行列が発生していないか?
ファイルアップロードできない
- ソフトウェアのバグ?
- 保存先のストレージに空きがあるか?
- アップロードするファイルフォーマット形式は正しいか?
ユーザーから頂くメッセージから、さまざまな原因が考えられます。しかし、1つ1つの問題が発生するたびに、問題の原因を調べていたら調査にとても時間がかかってしまいます。そこで、これらの問題について対応するために、監視システムを導入することで発生しそうな障害に対して事前に予防をおこなうことができます。
ステップ2 【WHAT】何をモニタリングしているのか?
モニタリングする仕組みがない場合、問題が発生しても人力で全ての仮説を検証するのは大変です。
一般的な監視項目には、以下の5つの項目があります。
1.死活監視
死活監視とは、サーバーに対して定期的に動作確認をおこないます。主に、PINGコマンドを使い監視をおこないます。サーバーからメッセージが返答されると成功、サーバーに到達できないとメッセージが返却できないので失敗になります。
2.リソース監視
リソース監視とは、サービスを動かしているサーバーのハードウェアのリソース情報を監視します。リソース情報の項目は、CPU使用率、メモリ使用量、ディスク容量、ネットワークの入出力使用料があります。
3.サービス監視
サービス監視とは、提供しているサービスに対して定期的に動作確認をおこないます。Webサービスの場合は、提供しているドメイン(例えば、example.com)に対して監視を行います。主にHTTPを用いて通信を行い、レスポンスコードが200が返却されると成功、レスポンスコードが500が返却されると失敗になります。
4.性能監視
性能監視とは、満足できる速度でサービスを提供できているかの監視をおこないます。簡単な監視項目の1つとして、サービスの応答速度があります。サービスの応答速度とは、Webページをリクエストしてからコンテンツが返却するまでの時間を測ります。Webサービスでは200ms以下、広告配信になると50ms以下の速度が求められています。たくさんのユーザーが利用すると、待ち時間が発生します。ユーザーがコンテンツを閲覧できるまでに何秒をかかってしまうと、ユーザーのストレスが溜まりサービスを離脱する確率が高くなるため押さえておきたい指標の1つです。
5.ログ監視
ログ監視とは、アプリケーションで出力されるログのことです。ログの中にはシステムのエラー、ユーザーのアクセス、ログイン情報等があります。これらのテキスト情報に対して検知したい文字列を設定し監視をおこないます。
ここで、さきほどの問題をどのような監視項目に落とせるか見てみましょう。
ログインできない
ログ監視
サービスが落ちている
死活監視、サービス監視
Webサイトが重たい
性能監視、リソース監視
ファイルがアップロードできない
ログ監視、リソース監視
このようにユーザーからの問い合わせは、いくつかの監視項目を組み合わせることで問題を検知することが可能なことがわかります。
ステップ3 【HOW】どのようにモニタリングするのか?
では、どのように監視を実践したら良いでしょうか?
弊社では、それぞれの監視項目について、いくつかのクラウドサービスを組み合わせて監視を行っています。
死活監視
リソース監視
サービス監視
性能監視
ログ監視
ログの集約はFluentd
ログの監視は、AWS Cloud Watch LogsやKibanaを検証しています。
まとめ
監視はとても奥が深く自前で監視システムを構築するのは難しいですが、
一度監視システムを構築できるとパターンが決まっているため、比較的自動化しやすいです。
筆者がオススメする書籍と発表資料を参考に、監視システムを構築してみてはいかがでしょうか?
オススメ書籍
Effective Monitoring and Alerting
筆者が発表した資料
Webエンジニアに贈る、正しい番犬の飼い方