目次 表示
SNPP(Simple Network Paging Protocol)はポケットベルに、片方向および双方向で無線メッセージを送信するための規格です。SNPP は Internet とTAP (Telocator Alphanumeric input Protocol)準拠のポケットベル端末間の接続を簡単に実現するプロトコルです。sendPage は、一方の端でSNPPを、もう一方の端でTAP (またはUCP)を出力するように設計されたプログラムです。プログラムは、SNPP を介してネットワークから呼び出しメッセージを受信すると、モデムまた は直接シリアル接続を用いてポケットベルセンターまたはポケットベル端末に呼び出しメッセージを送信します。sendPage でモデムを使用する場合、 PC のアクセス番号の情報が必要です。また、呼び出しメッセージを送信するポケットベルの PIN も必要です。これらの情報は、すべてポケットベル会社が把 握しています。
Nagios には、ポケットベル呼び出しの動作を制御するためのファイルが3つあります。
設定ファイル /etc/sendpage.cf - sendPage の実行を制御します。
Nagios設定ファイル contacts.cfg - ポケットベル会社を通じて呼び出しメッセージを受信する連絡先を設定します。
misccommands.cfg - ポケットベルの変数を設定します。
sendPage - http://www.sendpage.org/
Simple Network Paging Protocol (SNPP) - http://www.notepage.net/snpp.htm
TAP Paging Terminal Phone Numbers - http://www.notepage.net/tap-phone-numbers.htm
GroundWork Monitor には、sendPage があらかじめインストールされています。sendPage を再度インストールする必要がある場合は、下記のインストール・スクリプトを使用します。列挙されたtar.gz ファイルは、カレントディレクトリに存在するものとします。これらのファイルは次のリンクよりダウンロードできます。
次のスクリプトは配布されたソースを解凍後、ターゲットシステムにコンパイルします。
#!/bin/bash
#this currently does no error checking, however these are very simple
#packages and not so prone to errors.
DeviceSerial=Device-SerialPort-1.002.tar.gz
MailTools=MailTools-1.67.tar.gz
NetSNPP=Net-SNPP-1.17.tar.gz
sendPage=sendpage-1.tar.gz
function die() {
echo $*
exit 1
}
CWD=`pwd`
for package in $DeviceSerial $MailTools $NetSNPP $sendPage ; do
cd $CWD
tar zxvf $package || die could not extract, make sure you have permissions
packagedir=`echo $package | sed 's/.tar.gz$//g'`
cd $packagedir || die could not change to $packagedir. make sure it exists
perl Makefile.PL || die could not there was an error running
"perl Makefile.PL"
make install
done
exit 0
sendPage のインストールの最終段階では、監視システムが使用する実行レベル(たとえば3または5)と同じレベルで sendPage が起動されるよ うに適切なサービス管理ツールを使用して、/etc/init.d 内に起動・停止スクリプトを作成する必要があります。その後、設定ファイル /etc/sendpage.cf を作成します。
以下は、起動・停止スクリプトの例です。
#! /bin/sh
#
# /etc/init.d/sendpage
#
### BEGIN INIT INFO
# Provides: sendpage
# Required-Start $network $named $syslog
# Required-Stop:
# Default-Start: 3 5
# Default-Stop:
# Description: start the sendpage daemon
### END INIT INFO
# Determine the base and follow a runlevel link name.
base=${0##*/}
link=${base#*[SK][0-9][0-9]}
SENDPAGE_BIN=/usr/bin/sendpage
test -x $SENDPAGE_BIN || exit 5
# Shell functions sourced from /etc/rc.status:
# rc_check check and set local and overall rc status
# rc_status check and set local and overall rc status
# rc_status -v ditto but be verbose in local rc status
# rc_status -v -r ditto and clear the local rc status
# rc_failed set local and overall rc status to failed
# rc_failed <num> set local and overall rc status to <num><num>
# rc_reset clear local rc status (overall remains)
# rc_exit exit appropriate to overall rc status . /etc/rc.status
# First reset status of this service rc_reset
# Return values acc. to LSB for all commands but status:
# 0 - success
# 1 - generic or unspecified error
# 2 - invalid or excess argument(s)
# 3 - unimplemented feature (e.g. "reload")
# 4 - insufficient privilege
# 5 - program is not installed
# 6 - program is not configured
# 7 - program is not running
#
# Note that starting an already running service, stopping or restarting a
# not-running service as well as the restart with force-reload (in case
# signalling is not supported) are considered a success.
case "$1" in
start)
echo -n "Starting sendpage service"
## Start daemon with startproc(8). If this fails
## the echo return value is set appropriate.
if ! /sbin/checkproc -p /var/spool/sendpage/sendpage.pid $SENDPAGE_BIN; then
$SENDPAGE_BIN -bd start > /dev/null 2>&1
else
rc_reset
fi
# Remember status and be verbose
rc_status -v
;;
stop)
echo -n "Shutting down sendpage service"
## Stop daemon with killproc(8) and if this fails
## set echo the echo return value.
/sbin/killproc -p /var/spool/sendpage/sendpage.pid -TERM $SENDPAGE_BIN
# Remember status and be verbose
rc_status -v
;;
try-restart)
## Stop the service and if this succeeds (i.e. the
## service was running before), start it again.
## Note: try-restart is not (yet) part of LSB (as of 0.7.5)
$0 status >/dev/null && $0 restart
# Remember status and be quiet
rc_status
;;
restart)
## Stop the service and regardless of whether it was
## running or not, start it again.
$0 stop
$0 start
# Remember status and be quiet
rc_status
;;
force-reload)
## Signal the daemon to reload its config. Most daemons
## do this on signal 1 (SIGHUP).
## If it does not support it, restart.
echo -n "Reload sendpage service"
# if it supports it:
/sbin/killproc -p /var/spool/sendpage/sendpage.pid -HUP $SENDPAGE_BIN
#touch /var/run/FOO.pid
rc_status -v
/usr/bin/sendpage -br > /dev/null 2>&1
## Otherwise:
#$0 stop && $0 start
#rc_status
;;
reload)
echo -n "Reload sendpage service"
# If it supports signalling:
/sbin/killproc -p /var/spool/sendpage/sendpage.pid -HUP $SENDPAGE_BIN
#touch /var/run/FOO.pid
rc_status -v
/usr/bin/sendpage -br > /dev/null 2>&1
## Otherwise if it does not support reload:
#rc_failed 3
#rc_status -v
;;
status)
echo -n "Checking for service sendpage: "
## Check status with checkproc(8), if process is running
## checkproc will return with exit status 0.
# Status has a slightly different for the status command:
# 0 - service running
# 1 - service dead, but /var/run/ pid file exists
# 2 - service dead, but /var/lock/ lock file exists
# 3 - service not running
# NOTE: checkproc returns LSB compliant status values.
/sbin/checkproc -p /var/spool/sendpage/sendpage.pid $SENDPAGE_BIN
rc_status -v
;;
*)
echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload}"
exit 1
;;
esac
rc_exit
sendPage の実行は、設定ファイル/etc/sendpage.cf によって制御されます。このファイルでは、sendPage が通信を行うモデム、呼び出すポケットベル会社、呼び出しメッセージを送る受信者(ポケットベル受信者)を指定します。ポケットベル会社は、設定ファイル中では paging central(ポケットベルセンター)または pc と呼ばれます。設定ファイルを作成したら、sendPage デーモンを再起動する必要があります。定義したポケットベル会社ごとに別のキュー・プロセスが表示されます。メッセージは sendPage 付属のSNPPと呼ばれるPERL スクリプトによってキューに投入します。
[modem:sportster]
dev = /dev/ttyS0
dialout="9,"
areacode="206"
[pc:metrocall]
areacode=206
phonenum=6227585
stricttap=true
[recip:mypager]
dest=1234567@metrocall
モデムの名前は、sportsterです。複数のモデムを定義した場合、ポケットベル・センター(pc)のセクションの設定では特定のモデムを使用するか、 使用可能なモデムの中からsendPage に選ばせることができます。通信に関する複数のデフォルトがあらかじめ設定されています。使用する環境におい て、これらのデフォルトをオーバライドする必要があるかどうかを、sendPage のドキュメントを調べて決定します
ポケットベルセンターの名前は、metrocallです。電話番号は、次のリンクに掲載されているTAP プロバイダのリストを調べてください: http://www.notepage.net/tap-phone-numbers.htm. 使用するポケットベルに対するサービスによっては、フリーダイヤルを使用できる場合があります。使用できない場合は、対象となるポケットベルと同じ市外局番を使用します。詳細はポケットベル会社に問い合わせてください。
受信者の名前は、mypager です。mypager という文字列は、sendPage のキューにメッセージを送信するときに受信者を識別するためのハンド ルです。dest 設定は、市外局番を除いたポケットベルの電話番号(ポケットベルID)です。フリーダイヤルの TAP 番号を使用する場合は、この定義に市 外局番を含める必要があります。dest には、受信者が使用するポケットベル・センター(ポケットベル会社)も設定します。
sendPage を設定してデーモンを再起動すると、受信者 mypager に対して送信されたメッセージは、モデムsportster によってmetrocall の番号を呼び出して処理されます。設定は、次のようなコマンドを発行することによってテストできます。
/usr/bin/snpp -f groundwork@localhost -m 'test message' mypager
Nagios から sendPage を使用する場合の設定は複数のステップからなります。最初のステップは、SNPP 呼び出し方法を決定するコマンド定義 を作成することです。以下の使用法では新規コマンドラインの追加方法についての手順を示します。コマンドを定義するコマンドラインは、連絡先、ホス ト、サービス定義から参照されます。コマンドは、Nagios がプラグインを実行するために使用します。定義可能なコマンドにはサービスチェック、 サービス通知、サービスイベントハンドラ、ホストチェック、ホスト通知、ホストイベントハンドラなどがあります。コマンド定義にはマクロを含め ることができますが、コマンドが使用される状況で有効なマクロのみを含めるように注意する必要があります。マクロの全リストと使用方法については、 Nagiosドキュメントを参照してください。
以下は、misccommands.cfg ファイルに記述する定義の例です。一方はホストに関する問題を、他方はサービスに関する問題をポケットベルに送 信するために使用します。mypager は、ポケットベル変数情報を提供するNagios マクロの $CONTACTPAGER$ に置換されていることに 注意してください。このマクロはランタイムに Nagios によって定義され、この場合は呼び出しメッセージの受信者名を表します。受信者とは、サービス およびホスト通知の連絡先のポケットベル番号/アドレスです。以下の複数のステップに従って、通知先定義内に設定します。
define command{
command_name host-notify-by-epager
command_line /usr/bin/snpp -f nagios@localhost -m 'Host:
$HOSTNAME$ Host State: $HOSTSTATE$' $CONTACTPAGER$
}
define command{
command_name notify-by-epager
command_line /usr/bin/snpp -f nagios@localhost -m 'Host:
$HOSTNAME$ Host State: $HOSTSTATE$ Service: $SERVICEDESC$ State: $SERVICESTATE$' $CONTACTPAGER$
}
図 . 設定 - 新規コマンドの追加
Configuration のメニュー・オプションからCommands(コマンド)を選択します。
Copy(複製)または New(新規)を選択します。注意:作成するコマンドが既存のコマンドと同じフォーマットの場合、またはパラメータを変えてプラグイン・プログラムを呼び出すものである場合は、Copyオプションの方が便利です。
Command Wizard( コマンドウィザード)画面の各項目に入力します:
Name(名前) - コマンド名です。コマンドを識別するための簡易名を設定します。
Type(タイプ) - 必須 コマンド・タイプを指定します。Check = サービス/ホスト・チェック・コマンド、ハンドラ、Notify = 通知コマンド、Other = その他のコマンド(すなわち、Performance Data Collector:性能データ収集)
Command Line(コマンドライン) - コマンドをサービスまたはホスト・チェック、通知、イベント・ハンドラに使用した場合に、Nagios が実際に何を実行するかを定義する設定です。
注意:コマンドラインは、コマンド・プロンプトにおける実行方法とも一致させる必要があります。ここでは、Nagios マクロを使用できます。コマンド実行前に Nagios によって置き換えられます。代表的なマクロとして、ホストのIPアドレスを表す $HOSTADDRESS$、Nagiosプラグイン・ディレクトリを表す $USER1$ などがあります。
Add(追加)を選択してコマンドを作成します。注意:コマンドラインで使用するプラグインがプラグイン・フォルダに存在することを確認してください。
以下の使用法では連絡先グループの作成方法についての手順を示します。はじめに連絡先テンプレートを作成し、次に連絡先を定義して、最後に連絡先グループを作成します。連絡先テンプレートは、共通の属性を持つ連絡先を複数作成する場合に有効です。連絡先はネットワークに障害が発生した場合に連絡する担当者を特定するために定義します。連絡先グループとは1つまたは複数の連絡先の集合です。連絡先グループは、ホストやサービスに関する通知を設定するために、エスカレーション・テンプレートやエスカレーション・ツリーで使用できます。
設定を容易にする Nagios のデフォルトの設定には、Nagios と Monarch 連絡先テンプレートを使用します。以下に示す例は、次のステップで連絡先 mypager を定義するときにコピー元とする、連絡先テンプレートです。通常、contacts.cfg ファイルに記述します。以下のテンプレートは連絡先テンプレートと呼ばれ、連絡先定義で使用することにより、通知を送信するタイミングや状態、使用するコマンドなどを規定します。この例では、このテンプレートに notify-by-epager および host-notify-by-epager コマンドを定義するということに注意してくだ さい。
define contact {
name contact-template
host_notification_period 24x7
service_notification_period 24x7
host_notification_options d,u,r,n
service_notification_options u,c,w,r,n
host_notification_commands host-notify-by-epager
service_notification_commands notify-by-epager }
図 .設定 - 連絡先テンプレートの作成
Configurationのメニュー・オプションからContacts(コンタクト)を選択します。
Contact Tmplates(コンタクトテンプレート)を選択します。
Copy(複製)またはNew(新規追加)を選択します。
Contact Template Properties(コンタクトテンプレート設定)画面の各項目に入力します。
Name(名前) - 必須 連絡先テンプレートの名前です。連絡先グループ定義で参照されます。通常、この値は$CONTACTNAME$マクロに保存されます。
Host Notification Period(ホスト通知時間帯) - 必須 ホストの障害または復旧に関して、連絡先への通知が可能な時間帯の簡易名を指定します。
Service Notification Period(ホスト通知時間帯) - 必須 サービスの障害または復旧に関して、連絡先への通知が可能な時間帯の簡易名を指定します。
Host Notification Options(ホスト通知オプション) - 必須 この連絡先に通知を送信するホストの状態を定義します。有効なオプションは、以下の1つまたは複数を組み合わせたものです。d = ホストのDOWN(停止)状態、u = ホストのUNREACHABLE(到達不能)状態、r = ホストの復旧時に、それぞれ通知を送信します。n(なし)を選択すると、連絡先はホスト通知を一切受信しなくなります。
Service Notification Options(サービス通知オプション) - 必須 この連絡先に通知を送信するサービスの状態を定義します。有効なオプションは、以下の1つまたは複数を組み合わせたものです。w = サービスのWARNING(警告)状態、u = サービスのUNKNOWN(不明)状態、c = サービスのCRITICAL(異常)状態、r = サービスの復旧時(OK状態)に、それぞれ通知を送信します。n(なし)を選択すると、連絡先はサービス通知を一切受信しなくなります。
Host Notification Commands(ホスト通知コマンド) - 任意 ホストの障害または復旧について連絡先に通知するための、一連のコマンドの簡易名を定義します。通知コマンドは、連絡先への通知が必要となった場合に実行されます。
Service Notification Commands(サービス通知コマンド) - 任意 サービスの障害または復旧について連絡先に通知するための、一連のコマンドの簡易名を定義します。通知コマンドは、連絡先への通知が必要となった場合に実行されます。
Add(追加)を選択して、新規連絡先テンプレートを追加します。新規テンプレートが保存されたことを知らせるメッセージが表示されます。
Continue(続ける) を選択してメイン・メニューに戻ります。
以下の定義は mypager の例です。通常、contacts.cfg ファイルに記述します。名前の宣言は Nagios によって使用されることに注意し てください。ポケットベルの宣言は、SNPP および sendPage が使用します。ポケットベルの宣言は、$CONTACTPAGER$ マクロとしてコマン ド定義に定義します。
define contact {
name mypager
alias Text pager contact 1
use contact-template
email email_address
pager mypager
}
図 . 設定 - 連絡先の定義
Configurationの メニュー・オプションからContacts(コンタクト)を選択します。
Contacts(コンタクト)を選択します。
Copy(複製)またはNew(新規追加)を選択します。
ContactsTemplate Properties(コンタクト設定)画面の各項目に入力します。
Name(名前) - 必須 連絡先の名前です。連絡先グループ定義で参照されます。通常、この値は$CONTACTNAME$マクロに保存されます。
Alias(エイリアス)- 必須 より長い名前を使用する場合や、連絡先を識別するための設定です。通常、この値は$CONTACTALIAS$マクロに保存されます。
Email(電子メール) - 任意 連絡先の電子メール・アドレスを定義します。通知コマンドの設定によっては、連絡先への警報電子メールの送信にも使用できます。通常、この値は$CONTACTEMAIL$マクロに保存されます。
Pager(ポケットベル) - 任意 連絡先のポケットベル番号を定義します。ポケットベルへのゲートウェイの電子メール・アドレス(例: pagejoe@pagenet.com)も設定できます。通知コマンドの設定によっては、連絡先へのポケットベル警報通知の送信にも使用できます。通 常、この値は$CONTACTPAGER$マクロに保存されます。
Contact Template(連絡先テンプレート)- 必須 この連絡先にもっとも適した連絡先テンプレートを選択します。継承のチェックボックスに注意してください。テンプレートの値をオーバライドするには、 テンプレートからすべての値を継承するチェックを外し、連絡先オプションの一覧に必要な変更を加えます。
Add(追加)を選択して、新規連絡先を追加します。新規連絡先が保存されたことを知らせるメッセージが表示されます。
Continue(続ける)を選択してメイン・メニューに戻ります。
Nagiosは、個々の連絡先ではなく、連絡先グループの通知を送信することに注意が必要です。したがって、最後のステップとして Nagios 連絡先グループ定義を作成する必要があります。以下の例は、連絡先 mypager を含む連絡先グループ定義です。通常、contactgroups.cfg ファイルに記述します。下記の連絡先グループを使用するように、定義されているホストまたはサービスの状態が変化したり、エスカレートすると、ここまでのステップで行った設定に基づいて連絡先 mypager に通知が送信されます。
define contactgroup {
contactgroup_name admin
alias Administration contact group
members mypager
}
図 . 設定 - 連絡先グループの作成
Configuration のメニュー・オプションから Contacts(コンタクト)を選択します。
Contact Groups(コンタクトグループ)を選択します。
Copy(複製)または New(新規追加)を選択します。
Contact Group Properties(コンタクトグループ設定)画面の各項目に入力します。
Name(名前) - 連絡先グループの名前です。
Alias(エイリアス) - 必須 より長い名前を使用する場合や、連絡先グループを識別するための設定です。
Contacts(連絡先) - このグループに含める連絡先の簡易名のリストを定義する設定です。
Add(追加)を選択して、新規連絡先グループを追加します。新規連絡先グループが保存されたことを知らせるメッセージが表示されます。
Continue(続ける)を選択してメイン・メニューに戻ります。