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 パッケージをインストールする事です。このパッケージによってインストールされるデーモンはポート 4949 番をリッスンし、すべての動作しているプラグインによって収集されたデータを送り返します。それぞれのプラグインは収集されたデータの説明および最新の計測値を返す簡単なプログラムです。プラグインは /usr/share/munin/plugins/ に保存されますが、実際に使われるのは /etc/munin/plugins/ 内からシンボリックリンクを張られたプラグインだけです。
パッケージのインストールが完了したら、有効なプラグイン群が利用可能なソフトウェアと現在のホストの設定に基いて決定されます。しかしながら、自動設定は各プラグインの提供する機能に依存します。通常、手作業で結果を確認して微調整する事を推奨します。各プラグインに関する包括的な文書があればよいのですが、残念なことに、そのような文書は公式には存在しません。しかしながら、すべてのプラグインはスクリプトでほとんどは単純かつ詳細に説明されています。このため、各プラグインの機能を理解し、無効化するべきプラグインを決定するには、/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 アドレスを含めた同様の行を追加します。その後、invoke-rc.d 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 に基づくアクセス制御を使って制限されています。対応する詳細は 「ウェブサーバ (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 が使うディレクトリに書き込みパーティションを設定する必要があります:
# /etc/init.d/nagios3 stop
[...]
# dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw
# dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3
# /etc/init.d/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 オブジェクトに書かれたチャンネルを介して警告を受け取ります。
継承システムにより、情報を複製せずに多くのオブジェクト間の属性群を簡単に共有する事が可能です。加えて、初期設定には数多くの標準的なオブジェクトが定義されています; 多くの場合、初期設定の標準的なオブジェクトに加えて host、service、contact を定義するだけで簡単に設定を完了させる事が可能です。/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' command with custom parameters
define command{
    command_name          check_ftp2
    command_line          /usr/lib/nagios/plugins/check_ftp -H $HOSTADDRESS$ -w 20 -c 30 -t 35
}

# Generic Falcot service
define service{
    name                  falcot-service
    use                   generic-service
    contact_groups        falcot-admins
    register              0
}

# Services to check on 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
}

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