square.gif オープンソースリファレンス

Topic Home Print Page Send Comments

SNPP および sendPage について

目次 表示

SNPP(Simple Network Paging Protocol)はポケットベルに、片方向および双方向で無線メッセージを送信するための規格です。SNPP は Internet とTAP (Telocator Alphanumeric input Protocol)準拠のポケットベル端末間の接続を簡単に実現するプロトコルです。sendPage は、一方の端でSNPPを、もう一方の端でTAP (またはUCP)を出力するように設計されたプログラムです。プログラムは、SNPP を介してネットワークから呼び出しメッセージを受信すると、モデムまた は直接シリアル接続を用いてポケットベルセンターまたはポケットベル端末に呼び出しメッセージを送信します。sendPage でモデムを使用する場合、 PC のアクセス番号の情報が必要です。また、呼び出しメッセージを送信するポケットベルの PIN も必要です。これらの情報は、すべてポケットベル会社が把 握しています。

Nagios には、ポケットベル呼び出しの動作を制御するためのファイルが3つあります。

  1. 設定ファイル /etc/sendpage.cf  - sendPage の実行を制御します。

  2. Nagios設定ファイル contacts.cfg  ポケットベル会社を通じて呼び出しメッセージを受信する連絡先を設定します。

  3. misccommands.cfg - ポケットベルの変数を設定します。

リンク

ポケットベル呼び出しの方法

sendPageのインストール方法

あらかじめインストールされている sendPage

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におけるポケットベルの定義方法

sendPage の実行は、設定ファイル/etc/sendpage.cf によって制御されます。このファイルでは、sendPage が通信を行うモデム、呼び出すポケットベル会社、呼び出しメッセージを送る受信者(ポケットベル受信者)を指定します。ポケットベル会社は、設定ファイル中では paging central(ポケットベルセンター)または pc と呼ばれます。設定ファイルを作成したら、sendPage デーモンを再起動する必要があります。定義したポケットベル会社ごとに別のキュー・プロセスが表示されます。メッセージは sendPage 付属のSNPPと呼ばれるPERL スクリプトによってキューに投入します。

例 - sendpage.cf(モード、ポケットベル会社、受信者を定義します)

[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 によって定義され、この場合は呼び出しメッセージの受信者名を表します。受信者とは、サービス およびホスト通知の連絡先のポケットベル番号/アドレスです。以下の複数のステップに従って、通知先定義内に設定します。

コマンド定義 ― host-notify-by-epager

define command{

command_name                 host-notify-by-epager

command_line                 /usr/bin/snpp -f nagios@localhost -m 'Host:

$HOSTNAME$ Host State:       $HOSTSTATE$' $CONTACTPAGER$

}

コマンド定義 ― notify-by-epager

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$

}

図 . 設定 - 新規コマンドの追加

sendPage - Configuration Adding a New Command

ステップ1 – 新規コマンドの追加

  1. Configuration のメニュー・オプションからCommands(コマンド)を選択します。

  2. Copy(複製)または New(新規)を選択します。注意:作成するコマンドが既存のコマンドと同じフォーマットの場合、またはパラメータを変えてプラグイン・プログラムを呼び出すものである場合は、Copyオプションの方が便利です。

  3. Command Wizard( コマンドウィザード)画面の各項目に入力します:

  4. Add(追加)を選択してコマンドを作成します。注意:コマンドラインで使用するプラグインがプラグイン・フォルダに存在することを確認してください。

連絡先グループの設定方法

以下の使用法では連絡先グループの作成方法についての手順を示します。はじめに連絡先テンプレートを作成し、次に連絡先を定義して、最後に連絡先グループを作成します。連絡先テンプレートは、共通の属性を持つ連絡先を複数作成する場合に有効です。連絡先はネットワークに障害が発生した場合に連絡する担当者を特定するために定義します。連絡先グループとは1つまたは複数の連絡先の集合です。連絡先グループは、ホストやサービスに関する通知を設定するために、エスカレーション・テンプレートやエスカレーション・ツリーで使用できます。

ステップ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 }

図 .設定 - 連絡先テンプレートの作成

sendPage - Configuration Creating a Contact Template

  1. Configurationのメニュー・オプションからContacts(コンタクト)を選択します。

  2. Contact Tmplates(コンタクトテンプレート)を選択します。

  3. Copy(複製)またはNew(新規追加)を選択します。

  4. Contact Template Properties(コンタクトテンプレート設定)画面の各項目に入力します。

  5. Add(追加)を選択して、新規連絡先テンプレートを追加します。新規テンプレートが保存されたことを知らせるメッセージが表示されます。

  6. Continue(続ける) を選択してメイン・メニューに戻ります。

ステップ 2 – 連絡先の定義

以下の定義は mypager の例です。通常、contacts.cfg ファイルに記述します。名前の宣言は Nagios によって使用されることに注意し てください。ポケットベルの宣言は、SNPP および sendPage が使用します。ポケットベルの宣言は、$CONTACTPAGER$ マクロとしてコマン ド定義に定義します。

定義のフォーマット

define contact {

name        mypager

alias       Text pager contact 1

use         contact-template

email       email_address

pager       mypager

}

図 . 設定 - 連絡先の定義

sendPage - Configuration Defining Contacts

  1. Configurationの メニュー・オプションからContacts(コンタクト)を選択します。

  2. Contacts(コンタクト)を選択します。

  3. Copy(複製)またはNew(新規追加)を選択します。

  4. ContactsTemplate Properties(コンタクト設定)画面の各項目に入力します。

  5. Add(追加)を選択して、新規連絡先を追加します。新規連絡先が保存されたことを知らせるメッセージが表示されます。

  6. Continue(続ける)を選択してメイン・メニューに戻ります。

ステップ3 - 連絡先グループの作成

Nagiosは、個々の連絡先ではなく、連絡先グループの通知を送信することに注意が必要です。したがって、最後のステップとして Nagios 連絡先グループ定義を作成する必要があります。以下の例は、連絡先 mypager を含む連絡先グループ定義です。通常、contactgroups.cfg ファイルに記述します。下記の連絡先グループを使用するように、定義されているホストまたはサービスの状態が変化したり、エスカレートすると、ここまでのステップで行った設定に基づいて連絡先 mypager に通知が送信されます。

定義のフォーマット

define contactgroup {

contactgroup_name     admin

alias                 Administration contact group

members               mypager

}

図 . 設定 - 連絡先グループの作成

sendPage - Configuration Creating a Contact Group

  1. Configuration のメニュー・オプションから Contacts(コンタクト)を選択します。

  2. Contact Groups(コンタクトグループ)を選択します。

  3. Copy(複製)または New(新規追加)を選択します。

  4. Contact Group Properties(コンタクトグループ設定)画面の各項目に入力します。

  5. Add(追加)を選択して、新規連絡先グループを追加します。新規連絡先グループが保存されたことを知らせるメッセージが表示されます。

  6. Continue(続ける)を選択してメイン・メニューに戻ります。