スタートアップ向け監視設計入門

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.死活監視
死活監視とは、クライアントと監視したいサーバーのネットワークの疎通を確認します。疎通確認に使われる手法は主にICMPプロトコルを用いたPINGコマンドを使っておこないます。サーバーからICMPパケットが返答されると成功、エラーが返答されない場合は、なんらかの通信障害が発生することがわかります。
2.リソース監視
リソース監視とは、サービスを動かしているサーバーのハードウェアのリソース情報を監視します。リソース情報の基本項目は、CPU使用率、メモリ使用量、ディスク容量、ネットワークの入出力量があります。
3.サービス監視
サービス監視とは、提供しているサービスに対して定期的に動作確認をおこないます。Webサービスの場合は、提供しているIPやドメイン(例えば、tech.innova-jp.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エンジニアに贈る、正しい番犬の飼い方