FreeBSDでNagiosのインストール

| コメント(0) | トラックバック(0)

サーバー監視ソフトで「Nagios」というのがあります。
これが結構便利で、サーバーの死活監視だけでなくサービスレベルの監視ができて、Web上からも診ることができるようになっています。
nagios.gif
とても柔軟性が高いので、複数のサーバーを管理する管理者にはおすすめです。

インストールはportsから簡単インストール。


$ su
# cd /usr/ports/net-mgmt/nagios
# make install

Nagiosには様々なプラグインがありますが、それらも自動的に関連インストールされます。


インストールが完了すると、
・/etc/rc.confへの設定
・Web閲覧用のApache httpd.conf設定
が表示されるので、それぞれ設定してやります。

まず、/etc/rc.confに以下を書き加えます。


nagios_enable="YES"

これで、死活監視デーモンが動くようになりました。

また、ステータスをWebから診るために、Apacheのhttpd.confに下記の設定を書き加えます。
他のWebサーバーの設定はシラネw


ScriptAlias /nagios/cgi-bin/ /usr/local/www/nagios/cgi-bin/
<Directory /usr/local/www/nagios/cgi-bin>
        Options ExecCGI
</Directory>
Alias /nagios/ /usr/local/www/nagios/ <Directory /usr/local/www/nagios> Order allow,deny Allow from all </Directory>

ちなみにScriptAliasから設定してやらないと、Apacheにconfエラーと言われてしまいます。
見てのとおり二重にエイリアス設定してますからね。

もしエイリアスのパスを変えたりする場合は、後の設定にも影響するので注意してください。

とりあえずインストールはここまで。ここまではそれほど難しくはありません。
ここからが大変です。


とにかく監視するサーバーの設定などをしなければならないのですが、その設定が非常に多岐にわたるため、設定がとても面倒です。
難しくはないんですけどね。

まず、サンプルの設定ファイルを使えるようにします。


# cd /usr/local/etc/nagios/
# cp nagios.cfg-sample nagios.cfg
# cp cgi.cfg-sample cgi.cfg
# cp commands.cfg-sample commands.cfg
# cp resource.cfg-sample resource.cfg
# cp localhost.cfg-sample localhost.cfg


次に、Nagiosの主設定ファイル「nagios.cfg」を見直します。

CGIから管理コマンドを実行させるためには、「check_external_commands」を「1」にする必要があります。


#check_external_commands=0
check_external_commands=1

デフォルトでは、日付の書式がアメリカ式なので、嫌ならこれを書き換えます。


#date_format=us
date_format=iso8601

後はとりあえずデフォルトで大丈夫です。


そして、CGIに関する設定ファイル「cgi.cfg」を見直します。

エイリアスのパスを変更したときは、下記を修正する必要があります。


url_html_path=/nagios

Nagiosは、HTTP基本認証を通して管理ユーザーを設定することができます。
もし基本認証を使わない場合は、「use_authentication」を「0」に設定します。


#use_authentication=1
use_authentication=0

ただし、CGIから管理コマンドを実行するには、基本認証を設定する必要があります。
認証なしの場合は、Web上からの設定変更などができません。ステータスを診るだけになります。

もし基本認証を使う場合は、下記のように設定します。


use_authentication=1
default_user_name=guest
authorized_for_system_information=dualarch
authorized_for_configuration_information=dualarch
authorized_for_system_commands=dualarch
authorized_for_all_services=dualarch
authorized_for_all_hosts=dualarch
authorized_for_all_service_commands=dualarch
authorized_for_all_host_commands=dualarch

ここでは、ユーザー「dualarch」にすべての権限を与えています。
前述の「check_external_commands」と併せて設定すると、CGI側から死活監視デーモンの再起動やホストの監視停止などのコマンドを実行できるようになります。

「cgi.cfg」に関しては、とりあえずこのぐらいで大丈夫です。


一番の山場は次の「localhost.cfg」になります。
デフォルトでは、localhostについての監視設定だけ入っていますが、外部ホストの設定を追加することもできます。
この設定ファイルでは、いくつかの区画に分かれているので、それぞれ見ていきます。
ただ、設定項目がとても多いので、詳細な設定についてはここでは省きます。

まず、「timeperiod」ですが、これは時間帯を設定しています。たとえばビジネス営業時間とか、24時間365日、とか設定できます。
この設定によって、サーバーの監視時間帯やダウン時の通知時間帯などの柔軟な設定が可能になります。


define timeperiod{
        timeperiod_name workhours
        alias           "Normal" Working Hours
        monday          09:00-17:00
        tuesday         09:00-17:00
        wednesday       09:00-17:00
        thursday        09:00-17:00
        friday          09:00-17:00
        }

次に「contact」です。これはダウン時等の通知先の設定です。
通知する時間帯、どのようなステータスで通知するか、通知先のメールアドレスなどが設定できます。


define contact{
        contact_name                    nagios-admin
        alias                           Nagios Admin
        service_notification_period     workhours
        host_notification_period        workhours
        service_notification_options    w,u,c,r
        host_notification_options       d,r
        service_notification_commands   notify-by-email
        host_notification_commands      host-notify-by-email
        email                           nagios-admin@localhost
        }

そして「contactgroup」ですが、これは通知先をグループ化することができるようになっています。
組織的な監視を行っている場合に役に立ちます。


define contactgroup{
        contactgroup_name       admins
        alias                   Nagios Administrators
        members                 nagios-admin
        }

その後の「host」の設定は、サーバー等の機器の設定になります。
この設定は継承することができるので、まずテンプレートとして親設定があり、その後に各機器の設定が入ります。
また、上位機器の設定を加えることで、上下関係を作り、グラフィカル表示に反映することも可能です。

まず親設定です。


define host{
        name                            generic-host
        notifications_enabled           1
        event_handler_enabled           1
        flap_detection_enabled          1
        failure_prediction_enabled      1
        process_perf_data               1
        retain_status_information       1
        retain_nonstatus_information    1
        notification_period             24x7
        register                        0
        }

ここでは、親の設定を継承してさらにテンプレートを作っています。


define host{
        name                            freebsd-server
        use                             generic-host
        check_period                    24x7
        max_check_attempts              10
        check_command                   check-host-alive
        notification_period             workhours
        notification_interval           120
        notification_options            d,u,r
        contact_groups                  admins
        register                        0
        }

これまでのテンプレートを継承して、各機器の設定をすることができます。


define host{
        use                     freebsd-server
        host_name               localhost
        alias                   Local Host Setting
        address                 127.0.0.1
        check_command           check_http
        }

もしホスト自体の死活監視方法を変更したい場合は「check_command」ディレクティブを設定します。
デフォルトでは、親の設定で「check-host-alive」というコマンドになっており、これはPINGによる監視になっています。
ルーターなどICMPをスルーする設定になっていると、常に死んだ状態になってしまうので、変更しておいたほうがいいでしょう。

「hostgroup」の設定では、機器をグルーピングすることができます。


define hostgroup{
        hostgroup_name  test
        alias           Test Servers
        members         localhost
        }

「service」の設定では、監視するサービスを設定します。
どの機器でどのサービスを監視するかを設定することもできます。
この設定も親から継承することが可能です。

まず親設定です。


define service{
        name                            generic-service
        active_checks_enabled           1
        passive_checks_enabled          1
        parallelize_check               1
        obsess_over_service             1
        check_freshness                 0
        notifications_enabled           1
        event_handler_enabled           1
        flap_detection_enabled          1
        failure_prediction_enabled      1
        process_perf_data               1
        retain_status_information       1
        retain_nonstatus_information    1
        is_volatile                     0
        register                        0
        }

ここでは、親の設定を継承してさらにテンプレートを作っています。


define service{
        name                            local-service
        use                             generic-service
        check_period                    24x7
        max_check_attempts              4
        normal_check_interval           5
        retry_check_interval            1
        contact_groups                  admins
        notification_options            w,u,c,r
        notification_interval           60
        notification_period             24x7
        register                        0
        }

たとえばPINGで監視をする場合は、下記のような設定になります。


define service{
        use                             local-service
        host_name                       localhost
        service_description             PING
        check_command                   check_ping!100.0,20%!500.0,60%
        }

「host_name」には、このサービスをチェックする機器の名前を入れます。複数設定するときはカンマ区切りで入れます。
「check_command」というのがチェック方法です。ここでのコマンド「check_ping」は、「command.cfg」で定義されています。


「command.cfg」は各種コマンドが定義されていて、ここで設定したプログラムを走らせることができるようになっています。
ちなみに、「check_ping」等のプログラム本体は、portsでのインストールの場合「/usr/local/libexec/nagios/」にインストールされています。


「resource.cfg」は、インストールディレクトリやユーザーなどの設定です。
これは当初特に手を加える必要は無いでしょう。


設定は以上になります。
設定できる項目がとても多いですが、それだけ柔軟な監視ができますので、大規模なデータセンターなどの死活監視にも対応しうると思います。


ここまですべての設定が完了したら、最後に死活監視デーモンを走らせます。


# /usr/local/etc/rc.d/nagios start

これで完了です。
Web管理画面から見ると、徐々にステータスが埋まっていきます。

トラックバック(0)

トラックバックURL: http://blog.harmonicom.jp/mt/mt-tb.cgi/14

コメントする

プロフィール

ヤマカズー(ヤマカズ)

Webコンサルティング会社に勤めるシステムコンサルタントのおっちゃんです。
趣味はコンピューター。まんまですね。
あと申し訳程度に空手とか。
子供が二人います。

kazooooo at gmail.com

mixiはこちら

HARMONICOM

twitter

スゲーなんだこれ!?w > スマホをPCのセカンドディスプレーにできるAndroidアプリがイカス! #asciiplus http://t.co/4hbbnZeb
2012-02-02 20:08:03
いやあぁぁぁぁ~~!! ん?「D」と「.」?……「し」「る」? RT @hizous : @yamakazoo サーバの後ろに悲しそうな顔をした日本髪の若い女性が見えます・・・何か心当たりはないですか・・・? ん?キーボードの「D」と「、」のところを指さしているようです・・・
2012-02-02 11:39:49
家のMacBookといい会社のサーバーといい、原因不明なところでCPUがフルパワーになったり、ディスクへのアクセスが異様に遅くなったりする……これってある意味、寿命ってことなのかな……
2012-02-02 11:16:13
おお! RT @YahooNewsJP : [社会]<雑記帳>劇団四季「キャッツ」出演者が電子確定申告 - 毎日新聞 http://t.co/5tDvGJI6
2012-02-01 22:50:43
うちの会社にも備蓄いっぱい!! 深夜メンテの時にこっそり食べ(ry RT @YahooNewsJP : [社会]「ビスコ」売り上げ過去最高に…備蓄用缶人気で - 読売新聞 http://t.co/ZKIpZ1RJ
2012-02-01 19:12:41
follow me on Twitter