Product SiteDocumentation Site

12.4. 監視

監視は一般的な用語で、さまざまな目的で行われるさまざまな活動を意味します。すなわち一方では、マシンの提供するリソースが使い切られ、更新が必要になることを予測することが可能です。さらに他方では、サービスが利用できなくなったり適切に動作していないことを可能な限り早く管理者に警告することにより、発生した問題の早急な修正を可能にすることを意味します。
Munin は最初の範囲をカバーします。すなわち Munin はいくつかのパラメータの経時変化をグラフィカルに図示します (使用された RAM、専有されたディスク領域、プロセッサの負荷、ネットワークトラフィック、Apache/MySQL の負荷などを図示します)。Nagios は 2 番目の範囲をカバーします。すなわち Nagios はサービスの稼働状態と利用可能状態を定期的に確認し、適切な経路 (電子メール、テキストメッセージなど) を通じて警告を送信します。MuninNagios はモジュール式に設計されているので、特定のパラメータやサービスを監視する新しいプラグインを簡単に作成できます。

12.4.1. Munin のセットアップ

Munin の目的は多くのマシンを監視することです。そしてこのため、Munin は当然クライアント/サーバアーキテクチャを採用しています。グラフ化を担当している中央ホストがすべての監視されているホストからデータを収集し、データの履歴グラフを生成します。

12.4.1.1. 監視対象ホストの設定

最初に munin-node パッケージをインストールします。munin-node パッケージによってインストールされるデーモンはポート 4949 番をリッスンし、すべての動作しているプラグインによって収集されたデータを送り返します。それぞれのプラグインは収集されたデータの説明および最新の計測値を返す簡単なプログラムです。プラグインは /usr/share/munin/plugins/ に保存されますが、実際に使われるのは /etc/munin/plugins/ 内からシンボリックリンクを張られたプラグインだけです。
munin-node パッケージのインストールが完了したら、利用できるソフトウェアと現在のホストの設定に基づいて有効なプラグイン群が決定されます。しかしながら、有効プラグインの自動決定は各プラグインの提供する機能に依存します。通常、手作業で結果を確認して微調整することを推奨します。すべてのプラグインに対して包括的な文書が用意されているわけではありませんが、プラグインギャラリーを閲覧すると面白いかもしれません。さらに、すべてのプラグインはスクリプトで、その多くは単純かつ詳細に説明されています。このため、各プラグインの機能を理解して無効化するべきプラグインを決定するには /etc/munin/plugins/ を閲覧すると良いでしょう。同様に、/usr/share/munin/plugins/ の中にある興味深いプラグインを有効化するには、ln -sf /usr/share/munin/plugins/plugin /etc/munin/plugins/ を使ってシンボリックリンクを作成するだけです。プラグイン名がアンダースコア「_」で終わる場合、そのプラグインはパラメータが必要という点に注意してください。シンボリックリンクの名前を使って、このパラメータを指定します。従って、たとえば「if_」プラグインは必ず if_eth0 シンボリックリンクを使って有効化しなければいけません。こうすることで、eth0 インターフェースのネットワークトラフィックを監視します。
すべてのプラグインを正常に設定したら、収集されたデータへのアクセス制御に関するデーモン設定を更新します。これを行うには、/etc/munin/munin-node.conf ファイルの中で allow 指示文を使います。デフォルト設定は allow ^127\.0\.0\.1$ で、ローカルホストへのアクセスのみを許可します。通常、管理者はグラフ化を担当しているホストの IP アドレスを含めた同様の行を追加します。その後、service munin-node restart を使ってデーモンを再起動します。

12.4.1.2. グラフ化担当マシンの設定

「グラフ化担当マシン」はデータを集計し対応するグラフを生成するだけのコンピュータです。「グラフ化担当マシン」に必要なソフトウェアは munin パッケージに含まれます。標準的な設定は munin-cron を (5 分ごとに) 実行します。このコマンドは /etc/munin/munin.conf にリストされているすべてのホスト (デフォルトではローカルホストのみがリストされています) からデータを収集し、時系列データを /var/lib/munin/ にある RRD ファイル (Round Robin Database、経時変化するデータを保存するために設計されたファイルフォーマット) に保存し、/var/cache/munin/www/ に含まれるグラフを使って HTML ページを生成します。
すべての監視対象のマシンは /etc/munin/munin.conf 設定ファイルにリストされていなければいけません。各マシンは完全なセクションの形でリストされています。セクションはマシンと同じ名前で、少なくとも対応する IP アドレスを指定する address エントリを持っていなければいけません。
[ftp.falcot.com]
    address 192.168.0.12
    use_node_name yes
セクションをさらに複雑にして、複数のマシンからのデータをまとめて作成されるグラフを追加することも可能です。設定ファイルの中で提供されている見本がカスタマイズの良い足掛かりとなります。
最後の段階は生成されたページを公開することです。そしてこれは、ウェブサイトから /var/cache/munin/www/ の内容を利用できるようにするようウェブサーバを設定することを意味しています。通常このウェブサイトへのアクセスは認証メカニズムか IP に基づくアクセス制御を使って制限されています。アクセス制御の詳細は第 11.2 節「ウェブサーバ (HTTP)」をご覧ください。

12.4.2. Nagios のセットアップ

Munin と異なり、Nagios の場合、必ずしも監視対象のホストに何かをインストールする必要はありません。そしてほとんどの場合、Nagios はネットワークサービスの可用性を確認するために使われます。たとえば Nagios を使うことで、ウェブサーバに接続して特定のウェブページがある時間内に取得できるかを確認することが可能です。

12.4.2.1. インストール

Nagios をセットアップするには、最初に nagios3nagios-pluginsnagios3-doc パッケージをインストールします。これらのパッケージをインストールするとウェブインターフェースが設定され、最初の nagiosadmin ユーザが作成されます (このユーザのパスワードが尋ねられます)。他のユーザを追加するには、Apache の htpasswd コマンドを使ってユーザを /etc/nagios3/htpasswd.users ファイルに追加するだけです。Debconf 質問がインストール中に表示されない場合、dpkg-reconfigure nagios3-cgi を使って nagiosadmin のパスワードを定義することも可能です。
ブラウザで http://server/nagios3/ にアクセスすると、ウェブインターフェースが表示されます。特に、Nagios は自分が実行されているマシンのいくつかのパラメータを既に監視している点に注意してください。しかしながら、たとえばホストに対するコメントを追加するなどの対話型機能は動作しません。Nagios のデフォルト設定はこれらの機能を無効化し、セキュリティの理由からとても厳しい制限を設けています。
/usr/share/doc/nagios3/README.Debian で説明されている通り、いくつかの機能を有効化するには /etc/nagios3/nagios.cfg を編集し、check_external_commands パラメータを「1」に設定します。また、以下のようにして、Nagios が使うディレクトリに書き込みパーミッションを設定する必要があります。
# service nagios3 stop
[...]
# dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw
# dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3
# service nagios3 start
[...]

12.4.2.2. 設定

Nagios のウェブインターフェースはかなり良くできていますが、設定もできませんし、監視対象のホストやサービスの追加もできません。全体の設定は中央設定ファイル /etc/nagios3/nagios.cfg から参照されているオブジェクト設定ファイルを使って管理されます。
Nagios の概念を理解していない場合、オブジェクト設定ファイルの内容に立ち入るべきではありません。オブジェクト設定ファイルから設定するオブジェクトには以下の種類があります。
  • host は監視対象のマシンです。
  • hostgroup はグループ化して表示されたり、同じ設定要素を持つホスト群です。
  • service はホストやホストグループへの検査項目を定義します。これは多くの場合、あるネットワークサービスに対する検査を定義するものですが、いくつかのパラメータ (たとえば空きディスク領域やプロセッサ負荷) が条件を満たす範囲内にあるかに対する検査を定義することも可能です。
  • servicegroup はグループ化して表示されるサービス群です。
  • contact は警告を受け取る人です。
  • contactgroup は警告を受け取る人のグループです。
  • timeperiod は時間範囲で、この範囲内にいくつかのサービスを確認します。
  • command はサービスを確認するために実行するコマンドラインです。
オブジェクトの種類に応じて、各オブジェクトにはカスタマイズが可能な複数の属性が含まれます。完全なリストはここに挙げるには長すぎますが、最重要の属性はオブジェクト間の関係性を示す属性です。
servicecommand を使い、timeperiod で定めた時間内に host (または hostgroup) で稼働する特定の機能を確認します。問題が起きた場合、Nagios はそのサービスに関連付けられた contactgroup のメンバーに警告を送信します。各メンバーは対応する contact オブジェクトに書かれたチャンネルを介して警告を受け取ります。
継承システムにより、情報を複製せずに多くのオブジェクト間の属性群を簡単に共有することが可能です。加えて、初期設定には数多くの標準的なオブジェクトが定義されています。このため多くの場合、初期設定の標準的なオブジェクトに加えて新たな hostservicecontact を定義するだけで簡単に設定を完了させることが可能です。/etc/nagios3/conf.d/ に含まれるファイルはオブジェクトの動作に関する良い情報源です。
Falcot Corp の管理者は以下の設定を使います。

例 12.3 /etc/nagios3/conf.d/falcot.cfg ファイル

define contact{
    name                            generic-contact
    service_notification_period     24x7
    host_notification_period        24x7
    service_notification_options    w,u,c,r
    host_notification_options       d,u,r
    service_notification_commands   notify-service-by-email
    host_notification_commands      notify-host-by-email
    register                        0 ; Template only
}
define contact{
    use             generic-contact
    contact_name    rhertzog
    alias           Raphael Hertzog
    email           hertzog@debian.org
}
define contact{
    use             generic-contact
    contact_name    rmas
    alias           Roland Mas
    email           lolando@debian.org
}

define contactgroup{
    contactgroup_name     falcot-admins
    alias                 Falcot Administrators
    members               rhertzog,rmas
}

define host{
    use                   generic-host ; Name of host template to use
    host_name             www-host
    alias                 www.falcot.com
    address               192.168.0.5
    contact_groups        falcot-admins
    hostgroups            debian-servers,ssh-servers
}
define host{
    use                   generic-host ; Name of host template to use
    host_name             ftp-host
    alias                 ftp.falcot.com
    address               192.168.0.6
    contact_groups        falcot-admins
    hostgroups            debian-servers,ssh-servers
}

# 'check_ftp' コマンドにカスタムパラメータを渡します
define command{
    command_name          check_ftp2
    command_line          /usr/lib/nagios/plugins/check_ftp -H $HOSTADDRESS$ -w 20 -c 30 -t 35
}

# Falcot の運用する一般サービスを定義します
define service{
    name                  falcot-service
    use                   generic-service
    contact_groups        falcot-admins
    register              0
}

# www-host 上の監視対象サービスを定義します
define service{
    use                   falcot-service
    host_name             www-host
    service_description   HTTP
    check_command         check_http
}
define service{
    use                   falcot-service
    host_name             www-host
    service_description   HTTPS
    check_command         check_https
}
define service{
    use                   falcot-service
    host_name             www-host
    service_description   SMTP
    check_command         check_smtp
}

# ftp-host 上の監視対象サービスを定義します
define service{
    use                   falcot-service
    host_name             ftp-host
    service_description   FTP
    check_command         check_ftp2
}
この設定ファイルでは、2 種類の監視対象ホストが定義されています。1 番目のホストはウェブサーバです。Nagios はこのホストに対してウェブサーバが HTTP (80) とセキュア HTTP (443) ポートで稼働していること、SMTP サーバがポート 25 番で稼働していることを確認します。2 番目のホストは FTP サーバです。Nagios はこのホストに対して応答が 20 秒以内に返されることが保証されることを確認します。Nagios は FTP サーバからの応答にかかる時間が 20 秒より長い場合に警告を、30 秒より長い場合に危機的な警告を発します。Nagios のウェブインターフェースは SSH サービスが監視されていることを示しています。すなわちこれは ssh-servers ホストグループに所属するホストの情報です。標準的なサービスの稼動状態確認は /etc/nagios3/conf.d/services_nagios2.cfg で定義されています。
継承の使い方に注意してください。具体的に言えば、オブジェクトを継承するには「use parent-name」の形で親オブジェクトの名前を指定します。親オブジェクトは識別可能でなければいけません。つまり、親オブジェクトに「name identifier」属性を与える必要があります。親オブジェクトが真のオブジェクトでなく、属性継承の機能を担うだけの場合、このオブジェクトに「register 0」属性を与えます。こうすることで Nagios はこのオブジェクトを考慮しなくなり、真のオブジェクトならば必須とされるいくつかのパラメータが欠けていてもその問題を無視するようになります。