監視やっていますか?外形監視と内部監視の設定ポイントを分かりやすく解説します!
サービス監視とは
インターネットでサービスを運営している以上、サービス障害は起き得るものです。障害の可能性がゼロなサービスはないと思います。そのため、サービス監視を事前に設定しておき、サービスダウンを検知して通知したり、リソースの変化を記録して分析に役立てたり、リソースの変化から将来起こりそうな障害を予測したりしておくことをきちんとしておくべきです。もちろん、24時間有人監視をやっているところもありますが、ここでは、無人で監視している例を前提に記載していきます。
外形監視と内部監視
監視を2つに分けると、外形監視と内部監視に分かれます。
・外形監視は、外部から見た接続状況を監視すること。
・内部監視は、システムの内部状態を監視すること。
になります。
監視の仕方については、それぞれ、
・外形監視は、ユーザーと同じ場所(外)にいる必要があります。
・内部監視は、内側からのアクセスを行ない、監視する必要があります。
内部監視
サービス監視とリソース監視
内部監視の中にもサービス監視という概念とリソース監視という概念に分けられます。
サービス監視は、サービスの稼働状況を監視することを指しており、ポートは空いてるか、サービスに必要なプロセスは起動してるかなどがポイントになってきます。リソース監視は、使っているサーバのリソースが足りているかを監視することを指しており、リソースの変化を記録しながら、CPU負荷は問題ないか、空きメモリはあるかを確認しています。
リソース監視のやり方 / ツール
一般的には、継続的なメトリックの収集と可視化を行なっているツールが、無料のものから有料のものまで多数ありますので、こういったツールを利用するようにします。サーバのリソースの変化を監視記録することで、障害を事前に回避する、あるいは障害発生後の分析に役立てることができるので、導入することをお勧めします。
munin
- muninのポイント
Muninとは、無料でオープンソースのコンピューターシステム監視、ネットワーク監視、インフラストラクチャ監視ソフトウェアアプリケーションです。 MuninはPerlで記述され、RRDtoolを使用してグラフを作成しています。リソース監視に特化したシステムになっており、CPU負荷、メモリ使用量、トラフィックなどをグラフ化することを得意にしています。 -
muninの弱いところ
正直使いづらいです。ノードの追加に少し作業が必要だったり、グラフがカッコよくなかったり、アラートも出せるが、管理が面倒だったり、少し物足りない印象を持っています。
Mackerel
- Mackerelのポイント
Mackerelとは、直感的サーバー監視サービスと謳っているサービスで、はてなの有償サービスです。ポイントとしては、グラフが見やすく使いやすく、エンジニアにも人気のサービスになっています。アラートも簡単に出すことができて、サーバ5台までなら、無料で利用することができます。デフォルトで、ロードアベレージ、CPU利用率、メモリ使用量、IOPS、ディスク使用量、ネットワークトラフィックが入っているため、これらの項目であれば、すぐに監視をスタートすることができます。それ以外の項目についも、プラグインで実装することができます。決まった出力ができれば内部実装は自由に作ることができます。フォーマットはSensu互換のようです。通知は、メール、slack、HipChat、PagerDuty、Chatworkなど、様々なツールとの連携が手軽に行なえます。グラフは有料プランで過去1年、無料だと過去1日だけなどの、制約はありますが。全体的には使いやすいかと思います。
監視のアラート通知について
監視システムが障害を検出した場合、どのように検出 / 通知しているのでしょうか。よく障害あるあるとして、監視システムが障害を検出しても、人間が気づかないでそのままになってしまうことが多々あります。
- メールで通知
普段は揮発性の通知(push/チャット)の方が便利ですが、どちらかというと、記録を残す意味で利用することが最近だと多いです。メール着信程度じゃ夜中起きることができない場合は、見直してみてください。
- チャットで通知
最近だと、スピード感を持って対応に入れることから、チャットで通知するケースが増えています。スピード大事で、普段の業務中はメールを見るケースが減っていることもありますので、チャットでスピーディに対応に入ることができます。
外形監視
外形監視の設定する
一般的な外形監視の設定方法について、設定をしていきます。例えば、当ブログ(https://tachitechi.com/)を監視する場合を例にあげたいと思います。
外形監視は、だいたい下記のような仕様になっています。
・チェック間隔はxx分毎の固定で確認しています。
・次の条件でエラーと認識し、アラート通知が行なわれます。
- ステータスコード / 2xxではなく、4xxまたは5xx系の場合、2xxまたは3xxはエラーではない正常な応答として認識することが多いです。
- タイムアウト / xx秒を超えた場合
- SSL証明書 / 証明書が失効している、不正の場合、または有効期限の残り日数が閾値を下回っている場合
- レスポンスタイム / 閾値を超えている場合
- レスポンスボディ / 指定文字列が含まれていない場合
・対象URLを決める
httpまたはhttpsを選択します。今回は、http://tachitechi.com/ と https://tachitechi.com/ のどちらも対象にします。
・アラートの発生条件を決める
レスポンスタイムを設定します。xx秒を超えたら、通知するように設定することができます。
・レスポンスボディを決める
指定した文字列がレスポンスボディに含まれているかを確認します。レスポンスボディに指定された文字列が含まれていない場合、アラートが通知されます。
・通知の再送間隔を決める
アラートが通知される状態(外形監視のエラー基準に引っ掛かる場合)が、指定された時間を超えても、改善されない場合、再度アラートを通知します。
・証明書の有効期限チェックの値を決める
SSL証明書の有効期限を決めます。有効期限が設定した閾値を下回った場合、アラートが通知されます。
外形監視をするメリット
- webページの状態をリアルタイムで把握できる
外形監視をすることによって、リアルタイムにWebサイトのパフォーマンスを把握することができます。監視サーバからwebの可用性と応答時間を確認し、設定していた監視の閾値を超えると、設定した通知方法(メール、slack、chatworkなど)に連絡が届きます。
外形監視のツール
- Mackerel
- New Relic
- Uptime Robot
MackerelとNew Relicは、有料プランで使うことができます。http/httpsのみになっていますが、簡単に設定できます。監視するメトリックを設定して、監視項目ごとに閾値を設定して、アラートの送信先を設定する、この3ステップでスタートすることができます。Uptime Robotは、無料で使うことができます。http/httpsに加え、Ping監視、Port監視も使えます。
監視のポイント
監視は、冒頭でも説明しましたが、インターネットでサービスを運営している以上、サービス障害は起き得るものです。そのため、いかに早くサービスの異変に気付ける仕組みを入れておくかがポイントだと考えています。
・異変を検知できるか
・異変を記録、分析できるようになっているか
・異変を気付けるか/通知できるか
この3つが大切になっているので、欠けていないか確認をして、安定的なサービス運用を行ないましょう。