小規模ウェブサービス向け、サーバ監視入門

  • 2011年8月18日 10:00
  • @sunomaru
  • Linux
  • Zabbix, サーバ監視, logwatch

どうも、すのまるです。
今日は久しぶりに インフラ周り の話をします。

AV女優.com を始めとする、 小規模ウェブサービス向けのサーバ監視 です。
個人でサービスを立ち上げた場合、潤沢な資金がないことから、十分なリソースを確保出来ません。
本来なら可用性を持つシステムを組みたいところを、1台のサーバにウェブサーバもデータベースサーバも、メールサーバも載せたシステムはざらにあります。
AV女優.com も似たようなサーバ構成で動いています。

今日は AV女優.com で行っているサーバ監視を魚に、 小規模ウェブサービス向けのサーバ監視 についてまとめます。

AV女優.comのサーバ構成

AV女優.com のサーバ構成です。

/img/posts/017/av-jyo_servers.png

サーバをNginxに変えたことから、ウェブサーバとアプリケーションサーバを分離しています。
予算上、データベースサーバを別に用意出来ないので、アプリケーションサーバと同じサーバ上に載っています。
その他に、ツイッターなどのデータを自動更新するためのクローラ、およびその他のバッチ処理を実施するための専用サーバがあります。

監視サーバを除くと、この3台で AV女優.com を運用しています。

AV女優.comの監視サーバ構成

次に、監視サーバ構成です。

/img/posts/017/av-jyo_watching_servers.png

監視サーバと呼べるのは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アカウント を持っており、そこでアラートを受け取っています。
と言うのも、障害発生時には大量のアラートが飛んできます。
普段使用するアカウントでメールを受け取ると、その他のメールが埋もれてしまうためです。

/img/posts/017/alert_inbox.png

また、 Googleカレンダー も活用しています。
Logwatchは自動で毎日メールが来るので、チェックのし忘れがありません。
しかし、その他に毎日チェックしたい項目があった場合、その存在自体を忘れてしまうか、チェックするのが面倒になります。
こういった項目をGoogleカレンダーに登録し、Gmailにアラートが飛ぶようにします。
そうすると、Logwatchのチェックと同時に、これらの項目のチェックも出来ます。

/img/posts/017/alert_calendar.png

私は Google Webmaster ToolsGoogle Analytics をGoogleカレンダーに登録し、チェックしています。
サーバ障害とは少し異なりますが、サービスの状態を毎日チェックするためです。
こうすることで、アップデートによるサービスの影響をいち早くキャッチ出来ます(簡単なところでは、リンク切れなど)。

監視対象がかなり被っていますが、これらのツールを活用すると 多角的 に監視出来ます。
私は毎朝、これらのレポートを読むのが習慣になっています。
規模が大きくなると、また違った監視方法が必要になるでしょう。
しかし AV女優.com レベルであれば、この監視である程度安定して運用出来ます。

この他に良い監視サービスを知っている、あるいはアドバイスがある方がいれば、コメント欄まで。

Zabbix統合監視「実践」入門 ~障害通知、傾向分析、可視化による省力運用

ちょっと一言

sunomaru

@sunomaru

エキスパートPythonは良書ですね。Pythonの本と言うより、オープンソースの本と言えます。そのうち、書評を。