Host Configuration File


・hosts.cfg
Host Configuration File である hosts.cfg は、ホスト、ホスト・グループ、通知先、通知先グループ、サービス等の内容を定義し、相互の関連付けを行います。
ここで定義する項目は次の9種類あります。

No. 定  義  項  目 内        容
1 TIME PERIOD NetSaintがホストやサーバーを監視したり、異常が発生した場合に通知先に連絡したりする時間帯を定義する。
2 HOST 個々のサーバー、ルーター、プリンタ等の機器に関して定義する。
3 HOST GROUP ホストグループを定義する。
異常発生時にはそのホストが属するホストグループに登録されている通知先グループのメンバーである通知先全てに連絡を行う。(あ〜、ややこし。(~_~;))
4 COMMAND ホストやサービスをチェックするコマンドの定義であったが、Version0.0.7から /usr/local/netsaint/etc/commands.cfg で定義することになり、ここでは異常発生時に通知先へ連絡するメール・ページャーの定義が残されている。
5 CONTACT ネットワーク上で異常が発生した場合の通知先を定義する。
6 CONTACT GROUP 通知先グループを定義する。
異常発生時にそのグループのメンバーである通知先全てに連絡を行う。
7 SERVICE 各ホストの監視対象とするサービスを定義する。
8 HOST GROUP NOTIFICATION ESCALATON  これに関する説明はかなりややこしいので、ここでは割愛させていただきます。(~_~;)
オプションでの設定ですので、サンプルファイルもコメントアウトされています。
応用編にご期待ください。(大丈夫かなぁ。。。)
9 SERVICE NOTIFICATION ESCALATION


(1)TIME PERIOD CONFIGURATION
書式 : timeperiod[<時間帯(略称)>]=<時間帯(正式名)>;<日曜日の時間帯>;<月曜日の時間帯>;
                       <火曜日の時間帯>;<水曜日の時間帯>;<木曜日の時間帯>;
                       <金曜日の時間帯>;<土曜日の時間帯>
     *(注):実際には1行で記述する。(以下同様)

インストールしたhosts.cfgのサンプルファイルの中に4つの時間帯に関する定義が記されています。
特に新たな定義を作成する必要はなく、この中の「24X7」をホストやサービスの監視時間帯等として使うことにします。
すなわち、「24時間・7日間」、日本流に言えば「24時間・365日」監視し続けるということです。

1 # timeperiod_name = "24x7"
# timeperiod_alias = "Hours A Days, 7 Days A Week"
# timeranges = 12:00am to 12:00pm (repeat 7 times to represent everyday)

timeperiod[24x7]=24 Hours A Day, 7 Days A Week;
00:00-24:00;00:00-24:00;00:00-24:00;00:00-24:00;00:00-24:00;00:00-24:00;00:00-24:00
2 # timeperiod_name = "workhours"
# timeperiod_alias = ""Normal" Working Hours"
# timeranges = 9:00am to 5:00pm (Notice the extra semicolon after the aliasname
# and the extra semicolon at the end (representing an off time for Sunday and Saturday)

timeperiod[workhours]="Normal" Working Hours;;09:00-17:00;09:00-17:00;09:00-17:
00;09:00-17:00;09:00-17:00;
3 # timeperiod_name = "nonworkhours"
# timeperiod_alias = "Non-Work Hours"
# timeranges = 12:00am to 12:00pm Sunday
# 12:00am to 9:00am and 5:00pm to 12:00am weekday
# (Notice the above time is repeated 5 times to represent
# Monday to Friday)
# 12:00am to 12:00pm Saturday

timeperiod[nonworkhours]=Non-Work Hours;00:00-24:00;00:00-09:00,17:00-24:00;
00:00-09:00,17:00-24:00;00:00-09:00,17:00-24:00;00:00-09:00,17:00-24:00;00:00-09:00,17:00-24:00;
00:00-24:00
4 # timeperiod_name = "none"
# timeperiod_alias = "No Time Is A Good Time"
# timeranges = none

timeperiod[none]=No Time Is A Good Time;;;;;;;


(2)HOST CONFIGURATION
書式 : host[<ホスト(略称)>]=<ホスト(正式名)>;<IPアドレス>;<上位ホスト(略称)>;
                 <稼動しているかどうかをチェックするコマンド(略称)>;
                 <ダウンしたと見なすまでのチェック回数>;
                 <ダウンしている場合に再度通知を発信するまでの待ち時間(分)>;
                 <監視する時間帯(略称)>;
                 <リカバリーした場合の通知 (1=通知する、0=通知しない)>;
                 <ダウンした場合の通知 (1=通知する、0=通知しない)>;
                 <通信不能となった場合の通知 (1=通知する、0=通知しない)>;
                 <状態(status)が変化した場合に実行するイベント・ハンドラー>

ここで、実際に監視するホストを定義します。
これについてもhosts.cfgファイルの中に様々なパターンのサンプルが記述されており、それを参考にして監視したいホストの定義を行います。
この中の<稼動しているかどうかをチェックするコマンド(略称)>ですが、これは /usr/local/netsaint/etc/commands.cfg ファイルの中で定義されていますので、一度このファイルの中を見ておくことをお勧めします。

ちなみに当サイトのサーバーは以下のように定義しています。
host[ms2]=MS2 Server;192.168.0.12;FITELnet;check-host-alive;10;30;24x7;1;1;1;
この意味は、
   ・ ホスト(略称) = ms2
   ・ ホスト(正式名) = MS2 Server
   ・ IPアドレス = 192.168.0.12 (自分自身のLAN上のIPアドレス)
   ・ 上位ホスト(略称) = FITELnet (このホストが接続しているルーターの略称。別途定義します)
   ・ 稼動しているかどうかをチェックするコマンド = check-host-alive (実態はping1回)
   ・ ダウンしたと見なすまでのチェック回数 = 10回
   ・ダウンしている場合に再度通知を発信するまでの待ち時間 = 30分
   ・ 監視する時間帯(略称) = 24x7 (24時間365日ずっと監視する)
   ・ リカバリーした場合の通知 = 1 (通知する)
   ・ ダウンした場合の通知 = 1 (通知する)
   ・通信不能となった場合の通知 = 1 (通知する)
   ・ 状態が変化した場合に実行するイベント・ハンドラー = 未定義
ということです。

また、外部のサーバーについては次のように定義します。
host[sample]=Sample Server;12.34.56.78;adsl-modem;check-host-alive;10;30;24x7;
この意味は、
   ・ ホスト(略称) = sample
   ・ ホスト(正式名) = Sample Server
   ・ IPアドレス = 12.34.56.78 (グローバルIPアドレス)
   ・ 上位ホスト(略称) = adsl-modem (当サイトのADSLモデムの略称です)
   ・ 稼動しているかどうかをチェックするコマンド = check-host-alive (実態はping1回)
   ・ ダウンしたと見なすまでのチェック回数 = 10回
   ・ダウンしている場合に再度通知を発信するまでの待ち時間 = 30分
   ・ 監視する時間帯(略称) = 24x7
   ・ リカバーした場合の通知 = 1 (通知する)
   ・ ダウンした場合の通知 = 1 (通知する)
   ・通信不能となった場合の通知 = 1 (通知する)
   ・ 状態が変化した場合に実行するイベント・ハンドラー = 未定義
ということです。

その他の監視対象ホストについても、上記のように定義していきます。


(3)HOST GROUP CONFIGURATION
書式 : hostgroup[<グループ略称>]=<グループ正式名>;<通知先グループ(略称)>;<ホスト(略称)>

これを定義する目的は、異常発生時にそのホストが属する(ホスト)グループの通知先グループのメンバーである通知先全てに連絡を行うようにするためです。

上の例の「ms2」と「sample」を同じグループとすることも可能であり、その場合は次のように定義します。
hostgroup[e-ryoichi.net]=e-RYOICHI.net GROUP;admin;ms2,sample
この意味は、
   ・ グループ略称 = e-ryoichi.net
   ・ グループ正式名 = e-RYOICHI.net GROUP
   ・ 通知先グループ = admin (CONTACT GROUP CONFIGURATION で定義します。)
   ・ ホスト = ms2,sample (複数列挙する場合はカンマで区切ります。)
ということです。


(4)COMMAND CONFIGURATION
NetSaintのVersion0.0.7からホストやサービスをチェックするコマンドは /usr/local/netsaint/etc/command.cfg の中で定義されるように変更されました。
ここでは、問題発生時の通知方法のコマンドについての定義が残されています。
サンプルには電子メールやページャーで通知する場合の定義が記述されており、デフォルトのままで使うことができます。

 ・サービスに問題が生じたときに電子メールを送る内容の定義
command[notify-by-email]=/usr/bin/printf '***** NetSaint *****\n\n
                   Notification Type: $NOTIFICATIONTYPE$\n\n
                   Service: $SERVICEDESC$\n
                   Host: $HOSTALIAS$\n
                   Address: $HOSTADDRESS$\n
                   State: $SERVICESTATE$\n\n
                   Date/Time: $DATETIME$\n\n
                   Additional Info:\n\n
                   $OUTPUT$' | /bin/mail -s '** $NOTIFICATIONTYPE$ alert
                   - $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **'
                   $CONTACTEMAIL$

 ・ホストに問題が生じたときに電子メールを送る内容の定義
command[host-notify-by-email]=/usr/bin/printf "***** NetSaint *****\n\n
                      Notification Type: $NOTIFICATIONTYPE$\n
                      Host: $HOSTNAME$\n
                      State: $HOSTSTATE$\n
                      Address:$HOSTADDRESS$\n
                      Info: $OUTPUT$\n\n
                      Date/Time: $DATETIME$\n" |
                      /bin/mail -s 'Host $HOSTSTATE$
                      alert for $HOSTNAME$!' $CONTACTEMAIL$

先の例の「ms2」サーバーがダウンした場合、次のような内容が送られてきます。
***** NetSaint *****

Notification Type: PROBLEM
Host: ms2
State: DOWN
Address: 192.168.0.12
Info: Connection refused or timed out

Date/Time: Fri Jan 19 13:34:46 JST 2002


(5)CONTACT CONFIGURATION
書式 : contact[<通知先(略称)>]=<通知先(正式名)>;
                     <サービスに関する通知の発信時間帯>;
                     <ホストに関する通知の発信時間帯>;
                     <サービスがリカバリーした時(1=通知する、0=通知しない)>;
                     <サービスがCRITICALの状態になった時(1=通知する、0=通知しない)>;
                     <サービスがWARNINGの状態になった時(1=通知する、0=通知しない>;
                     <ホストがリカバリーした時(1=通知する、0=通知しない>;
                     <ホストがダウンした時(1=通知する、0=通知しない>;
                     <ホストがUNREACHABLEとなった時(1=通知する、0=通知しない>;
                     <サービスに関する通知方法のコマンド>;
                     <ホストに関する通知方法のコマンド>;
                     <通知先のメールアドレス>;
                     <通知先のページャーアドレス>;

ここでは、ホストやサービスに問題が発生したり、リカバリーした場合に、メールやページャーで連絡する通知先を定義します。
私の場合、次のように定義しました。
contact[admin]=
Netsaint Admin;24x7;24x7;1;1;1;1;1;1;notify-by-email;host-notify-by-email;admin@e-ryoichi.net;
内容は、
  ・通知先(略称) = admin
  ・通知先(正式名) = NetSaint Admin
  ・サービス及びホストに関する通知の発信時間帯 = 24x7 (定義した時間帯の略称)
  ・通知の要否については、全て「通知する(=1)」に設定
  ・サービスに関する通知方法 = notify-by-email
  ・ホストに関する通知方法 = host-notify-by-email
  ・通知先のメールアドレス = admin@e-ryoichi.net
です。


(6)CONTACT GROUP CONFIGURATION
書式 : contactgroup[<グループ名(略称)>]=<グループ名(正式名)>;<通知先1>,<通知先2>,・・・,<通知先n>

(5)で定義した通知先を必要に応じてグループにまとめます。
私の場合、通知先をひとつしか定義していませんが、次のようにグループを定義しました。
contactgroup[e-RYOICHI.net-admins]=e-RYOICHI.net Administrators;admin

これに関しては、特に説明は不要ですね。


(7)SERVICE CONFIGURATION (2002/11/20 青字の部分を訂正)
書式 : service[<ホスト名(略称)>]=<サービスの説明>;<volatile (0=ノーマル、1=volatile>;
                      <監視時間帯(略称)>;<最大チェック回数>;
                      <チェック間隔(分)>;<OK以外の状態となった時のチェック間隔(分)>;
                      <通知先グループ>;<再通知までの待ち時間(分)>;
                      <通知する時間帯(略称)>;
                      <リカバリー時の通知 (1=通知する、0=通知しない>;
                      <CRITICALとなった時 (1=通知する、0=通知しない)>;
                      <WARNINGとなった時 (1=通知する、0=通知しない)>;
                      <イベント・ハンドラー>;
                      <チェック・コマンド>;

ここで、各ホストの稼動対象となるサービスに関する定義を行います。
ホスト「ms2」のWWWサーバーを監視する場合には、次のように記述します。
service[ms2]=WWW;0;24x7;3;5;1;e-RYOICHI.net-admins;120;24x7;1;1;1;;check_http

この意味は、
  ・ホスト名(略称) = ms2
  ・サービスの説明 = WWW
  ・volatile = 0(ノーマル。volatileについてはここでは無視してください。説明がかなりややこしいです。)
  ・監視時間帯 = 24x7
  ・最大チェック回数 = 3回 (この回数チェックし、それでもOKの状態でない場合に初めて通知します。)
  ・チェック間隔 = 5分
  ・OK以外の状態となった時のチェック間隔 = 1分

  <補記:2002/11/20>
     「チェック間隔」(check_interval)は、サービスをチェックした結果が「OK」であるとか「WARNING」や
     「CRITICAL」の状態が続いているときにサービスチェックを行う間隔です。
     これに対して、「OK以外の状態となったときのチェック間隔」(retry_interval)は、サービスの状態が
     「OKの状態」から「OK以外の状態」に変化した場合に、サービスチェックを行う間隔です。
     これにより、「OK以外の状態」になった場合のチェック間隔を通常の時間より短くしたり、長くしたり
     することができます。
     そして、「OKの状態」に戻ったり、「OK以外の状態」が最大チェック回数に達したときに、ふたたび
     「チェック間隔」(check_interval)を使ってサービスチェックを行います。


  ・通知先グループ = e-RYOICHI.net-admins
  ・再通知までの待ち時間 = 120分 (問題が発生時したことを通知した後、120分経ってもWARNINGや
                          CRITICALの状態が続いている場合に再通知する)
  ・通知する時間帯 = 24x7 (特に制限を設けず、いつでも通知する)
  ・リカバリー時の通知 = 1 (通知します)
  ・CRITICALとなった時 = 1 (通知します)
  ・WARNINGとなった時 = 1 (通知します)
  ・イベント・ハンドラー = 定義していません。
  ・チェック・コマンド = check_http (commands.cfg で定義されていなければなりません。)
です。

後は、必要に応じて監視対象とするホストを定義していきます。
対象となるサービスはWWWを始め、SMTP、FTP、POP3、PINGの他に、現在ログインしているユーザーの数、稼動しているプロセスの数、ゾンビとなったプロセスの数、ハードディスクの容量等、結構いろいろあります。
/usr/local/netsaint/etc/commands.cfg を覗いてみると、こんなことが出来るのかということがわかるかと思います。


(8)HOST GROUP NOTIFICATION ESCALATION
(9)SERVICE NOTIFICATION ESCALATON
この2つの定義に関しての説明は、ちょっとややこしいので、ここでは割愛させていただきます。(~_~;)
必ず定義しなければならないものではありません。
問題発生時の通知方法に関するテクニック、とだけ言っておきます。


(10)SERVICE NOTIFICATION ESCALATON
これについては、現在研究中(~_~;)です。
デフォルトでコメントアウトされてますので、とりあえずそのままにしておいてください。



さて、これで hosts.cfg の編集も終わり、残すところは CGI CONFIGURATION FILE である nscgi.cfg だけとなりました。

back HOME