どうも、すのまるです。
今日は久しぶりに インフラ周り の話をします。
AV女優.com を始めとする、 小規模ウェブサービス向けのサーバ監視 です。
個人でサービスを立ち上げた場合、潤沢な資金がないことから、十分なリソースを確保出来ません。
本来なら可用性を持つシステムを組みたいところを、1台のサーバにウェブサーバもデータベースサーバも、メールサーバも載せたシステムはざらにあります。
AV女優.com も似たようなサーバ構成で動いています。
今日は AV女優.com で行っているサーバ監視を魚に、 小規模ウェブサービス向けのサーバ監視 についてまとめます。
AV女優.comのサーバ構成
AV女優.com のサーバ構成です。
サーバをNginxに変えたことから、ウェブサーバとアプリケーションサーバを分離しています。
予算上、データベースサーバを別に用意出来ないので、アプリケーションサーバと同じサーバ上に載っています。
その他に、ツイッターなどのデータを自動更新するためのクローラ、およびその他のバッチ処理を実施するための専用サーバがあります。
監視サーバを除くと、この3台で AV女優.com を運用しています。
AV女優.comの監視サーバ構成
次に、監視サーバ構成です。
監視サーバと呼べるのは1台のみで、その上にZabbix-Serverが走っています。
- Homepage of Zabbix :: An Enterprise-Class Open Source Distributed Monitoring Solution
- 高機能な統合監視サービスです。
リソースの監視はもちろんのこと、ログの監視、ウェブページの監視まで行えます。
これに加え、各サーバ上にレポートを出すためのLogwatch、Cron、AWStatsが存在します。
- Logwatch - Community Ubuntu Documentation
- Logwatchはサーバログを解析し、レポートにまとめてくれるプログラムです。
Apache2やPostfixなど、様々なサービスに対応しています。 - AWStats official web site
- ウェブサーバのログを解析してくれるプログラムです。
アクセス数やサーバステータスなどを解析し、HTMLページを生成してくれます。
基本的に、Zabbix、Logwatch、AWStats、Cronの4種類を利用してサーバを監視しています。
Zabbixの監視対象
Zabbixでは以下の項目を監視しています。
- CPU負荷
- ディスク容量
- メモリ使用量
- pingによるサーバの死活
- プロセス
- Nginx
- MySQL
- php5-fpm
- Postfix
- Scrapy
- Sphinx-Search - 各種ログ
- Nginxのエラー
- php5-fpmのエラー
- CakePHPのエラー
- MySQLのエラー
- MySQLのスロークエリ
- Scrapy(クローラ)のエラー - トップページの表示
- トップページのダウンロード速度
これらをまとめて監視出来るのが、Zabbixの良いところです。
Zabbixにはテンプレートが付属するので、Linuxに関することはデフォルトで全ての項目を監視出来ます。
また、MySQLやApache2の監視用テンプレートも付属します。
このテンプレートはお手軽ですが、若干監視項目が多く、小規模には向きません。
私はこのテンプレートを参考に、 独自に監視項目を絞ったテンプレート を作りました。
Zabbixの設定を説明するには骨が折れるので、以下書籍を参考にしてください。
- Zabbix統合監視「実践」入門 ~障害通知、傾向分析、可視化による省力運用
- 去年発売された、比較的新しい書籍です。
監視対象の勘所もまとまっているので、サーバ監視が初めての方にもオススメです。
Logwatchの監視対象
Logwatchは2種類の設定で運用しています。
- デイリーレポート
- 前日のサーバ状況をざっくりと把握するために使用します。
Nginxのアクセス状況や、SSHのログイン状況、ソフトウェアのアップデート状況など。
これを元に、サーバの異常を事前に検知します。 - Cronレポート
- 毎時間、Cronが実行されているかチェックするために使用します。
Cronが実行したコマンドが一覧として送られるので、正常に実行されているか確認します。
バッチサーバの死活監視にもなります。
デイリーレポートはLogwatchのデフォルトの設定です。
毎朝6時にログを解析した結果を送ってくれます。
設定は以下のページが参考になります。
- サーバのログ監視ツールを使いこなそう
- 古い記事ですが、Logwatchの設定がまとまっています。
Logwatch自体が長い間運用されてきたツールなので、古い情報でも問題なく使えます。
外部にメールを投げるには、MailToを対象のメールアドレスに、メールデーモンを外にメールを送れるよう設定すればOKです。
このデイリーレポートの他に、Cronレポートを作っています。
これは毎時間、Cronのログだけを解析して、レポートを作成する設定です。
Logwatchが正常に設定されていれば、 /etc/cron.hourly/00logwatch に以下を設定するだけです:
#!/bin/bash #Check if removed-but-not-purged test -x /usr/share/logwatch/scripts/logwatch.pl || exit 0 #execute /usr/sbin/logwatch --range '1 hour ago for that hour' --service cron --output mail #Note: It's possible to force the recipient in above command #Just pass --mailto address@a.com instead of --output mail
私はこれを、バッチサーバにだけ設定しています。
AWStatsの監視対象
AWStatsでは以下の項目を監視します。
- Analyticsで把握出来ないアクセス数
- Ajaxのアクセスなど、Analyticsで把握出来ないアクセス数を監視します。
想定外のアクセスが実行されていないかを確認します。 - botのアクセス数の監視
- Googleなどのbotの巡回を監視します。
- サーバステータスの監視
- 予期しないサーバステータスが出ていないかを監視します。
AWStatsはアクセス解析と、サーバ監視の両面を併せ持ちます。
アクセス解析の比重が大きいですが、サーバステータスなどサーバ監視にも役立つため、私は毎日チェックしています。
インストールや設定は次のページが役に立ちます。
- Apacheアクセスログ解析(AWStats)
- AWStatsの設定がわかりやすくまとまっています。
AV女優.com でもこの方法を使い、レポートを作成しています。 - AWStatsの見方
- AWStatsがどのような情報を吐き出すのかがわかります。
Cronの監視対象
Cronでは以下の項目を監視します。
- Cronが実行したコマンドのエラー
Cronには実行結果(標準出力、エラー)をメールで送信する機能があります。
AV女優.com ではこれを利用し、エラーが発生した場合にのみ、その内容が送信されるように設定しています:
MAILTO="hogehoge@gmail.com" 02 03 * * * curl http://localhost:6800/schedule.json -s -S > /dev/null
標準出力を > /dev/null とし、落とすことで、エラーが発生した場合のみ、メールが送信されます。
アラートボックスとその他のチェック項目
私は アラート専用のGmailアカウント を持っており、そこでアラートを受け取っています。
と言うのも、障害発生時には大量のアラートが飛んできます。
普段使用するアカウントでメールを受け取ると、その他のメールが埋もれてしまうためです。
また、 Googleカレンダー も活用しています。
Logwatchは自動で毎日メールが来るので、チェックのし忘れがありません。
しかし、その他に毎日チェックしたい項目があった場合、その存在自体を忘れてしまうか、チェックするのが面倒になります。
こういった項目をGoogleカレンダーに登録し、Gmailにアラートが飛ぶようにします。
そうすると、Logwatchのチェックと同時に、これらの項目のチェックも出来ます。
私は Google Webmaster Tools と Google Analytics をGoogleカレンダーに登録し、チェックしています。
サーバ障害とは少し異なりますが、サービスの状態を毎日チェックするためです。
こうすることで、アップデートによるサービスの影響をいち早くキャッチ出来ます(簡単なところでは、リンク切れなど)。
監視対象がかなり被っていますが、これらのツールを活用すると 多角的 に監視出来ます。
私は毎朝、これらのレポートを読むのが習慣になっています。
規模が大きくなると、また違った監視方法が必要になるでしょう。
しかし AV女優.com レベルであれば、この監視である程度安定して運用出来ます。
この他に良い監視サービスを知っている、あるいはアドバイスがある方がいれば、コメント欄まで。