個人用ツール

Pandora:Documentation ja:PandoraFMS SMS Gateway

提供: Pandora FMS Wiki JP

移動先: 案内, 検索

Pandora FMS ドキュメント一覧に戻る

Pandora FMS と SMS ゲートウェイのインストールと設定

GSM デバイスについて

We are using an special device to send SMS through a serial port (usb). You can use a generic GSM module accesible using USB/Serial Cable, or a GSM Phone with a USB/Serial connector supported by your hardware, this is not really important. Device used here, is the MTX 65 v3. And could be adquired for about 100$ in several websites like:

シリアルポート(USB) を通して SMS を送信するためには、特別なデバイスを利用します。USB ケーブルで接続することができる GSM モジュールまたは、携帯電話と一般的な USB ケーブルの組み合わせが利用できます。どれであるかはそれほど重要ではなく、ここで利用しているものは、MTX 65 v3 です。以下のウェブサイトでだいたい 100$ くらいで入手できます。

As you can see in Youtube, it's a pretty small and compatible device, with several optional components, like a GSM antenna (very useful if your datacenter is underground, for example).

Yutube のものでは、GSM アンテナ(例えばデータセンターが地下にある場合に便利)のようないくつかのオプションとともに小さくて互換性のあるものです。

Using a GSM mobile phone is also a good option, currently most modern mobile phones are supported on linux.

GSM 携帯を利用することも良いオプションです。現在ほとんどの(GSM)携帯は linux でサポートされています。

デバイスのインストール

The first step is to install the hardware device. This device is composed of several parts:

最初にハードウエアの設定を行います。このデバイスにはいくつかのパーツがあります。

  • Standard USB cable, with small connector and an end.
  • 小さいコネクタの通常の USB ケーブル
  • Power supply (in this sample is European 220v, if you live in USA, please be sure that power supply supports 110v).
  • 電源アダプタ (この例ではヨーロッパの 220v のものです。あまりかであれば 110v のものが必要です。)
  • SIM card.
  • SIM カード
  • Pandora FMS SMS gateway device.
  • Pandora FMS の SMS ゲートウェイデバイス
SMS package.jpg

Open the Pandora FMS SMS gateway device and put the SMS card inside.

Pandora FMS の SMS ゲートウェイデバイスを開き、SIM カードを挿します。

IMAG0026.jpg
IMAG0027.jpg

Plug to network in the "power" input, plug the USB cable in the SMS Gateway device and connect the other end to the Pandora FMS server using a standard USB port.

電源を接続し、SMS ゲートウェイデバイスに USB ケーブルを接続し、さらにそれを Pandora FMS サーバの USB ポートに接続します。

IMAG0029.jpg
IMAG0030.jpg

When you connect the device to the server, wait a few seconds and run "dmesg" command from the command line, you should see something like this screenshot. This means device has been recognized by the kernel and it's ready to accept commands on a device, like /dev/ttyACM0

サーバへデバイスを接続して数秒したら、コマンドラインから "dmesg" を実行します。次のような画面が表示されます。これは、デバイスを kernel が /dev/ttyACM0 として認識し、利用できるようになったことを示します。

SMSStep1.png

If you're here, the hardware setup is done. If not, please review all steps and be sure that:

ここまでくればハードウエアの設定は完了です。うまくいってない場合は、次の手順を確認してください。

  • Device is connected and led is blinking in a green color.
  • デバイスが接続され、LED が緑で点滅しているかどうか。
  • Device is connected to the USB port, both sides of wire, one side to the SMS device, and other side to the Pandora FMS server host.
  • デバイスが USB ポートに接続されているか。一方が SMS デバイス、他方が Pandora FMS サーバになっているか。
  • Device has a SIM card inside, and it's placed properly.
  • デバイスに SIM カードが正しく挿入されているかどうか。

新たなデバイスを利用するための SMSTools の設定

This device is managed by a software package called SMSTools. You can install smstools using the package provided by your Linux Distribution or use RPM package provided by Artica (only for RPM distributions).

このデバイスは、SMSTools というソフトウエアパッケージで制御します。smstools は、Linux ディストリビューションにより提供されているパッケージまたは、Artica が提供している RPM パッケージ(提供はRPMパッケージのみ)を使ってインストールできます。

Debian / Ubuntu

In Debian/Ubuntu, you need to "customize" the sendsms script that will use Pandora FMS

Debian/Ubuntu では、Pandora FMS が利用する sendsms スクリプトをカスタマイズする必要があります。

First, install the package from APT repositories

最初に APT リポジトリからパッケージをインストールします。

$ sudo apt-get install smstools

And then, you need to use a provided sample script to send sms from command line, and "customize" it:

次に、コマンドラインから sms を送信するためのサンプルスクリプトをカスタマイズします。

cp /usr/share/doc/smstools/examples/scripts/sendsms /usr/bin
chmod 750 /usr/bin/sendsms

Edit /usr/bin/sendsms and add the following line to the end of script:

/usr/bin/sendsms を編集し、次の行をスクリプトの最後に追加します。

chmod 666 $FILE

RPM を利用しているシステム (SUSE, Redhat)

Using our RPM is easier, just install it:

我々の RPM を利用するのが簡単です。次のようにインストールするだけです。

# rpm -i smstools*.rpm

SMStools の設定

Edit base configuration file:

基本設定ファイルを編集します。

# vi /etc/smsd.conf

Put this contents. If your dmesg output is not ttyACM0, use the tty device detected by your system.

次の設定を書きます。dmesg の出力が ttyACM0 でない場合は、システムが検出した tty デバイスに応じて変更してください。

# Example smsd.conf. Read the manual for a description

devices = GSM1
logfile = /var/log/smsd.log
loglevel = 10

[GSM1]
device = /dev/ttyACM0
incoming = no
pin = 2920

Use the PIN assigned to your SIM, in this example, PIN is "2920".

SIM に設定された暗証番号を定義します。この例では、"2920" です。

Then, start manually smstools:

そして、smstools を手動で起動します。

# /usr/bin/smstools start

Send an SMS test. BEWARE: Phone numbers must have full (int.) preffix. In this sample, +34 is Spanish preffix, and my phone number is 627934648:

SMS の送信テストをします。電話番号はプリフィックスを含めて指定することに注意してください。この例では、+34 がスペインで、電話番号が 627934648 です。

$ sendsms 34627934648 "Pandora FMS rocks"

Wait a minute and watch your logs to check that everything is correct. You should receive the SMS in a few seconds. Depending on the network, the first SMS can timeout every 10-20 seconds, after that, wait. The next SMS should be almost immediate. SMSTools uses a queue to send messages, so you can send as many as you want, and they will be out as soon as your mobile network could manage.

数分待って、すべて正常化どうかログを確認します。数秒で SMS を受信します。ネットワークによっては、最初の SMS は 10-20秒遅れるので、それ以上待ってください。次の SMS からすぐに届きます。SMSTools は、メッセージ送信にキューを利用します。たくさん送信したい場合、携帯のネットワークの処理に依存した速さになります。

To see the logs:

ログの確認は次の通りです。

# cat /var/log/smsd.log
2009-11-12 11:30:12,2, smsd: Smsd v2.2.20 started.
2009-11-12 11:30:12,6, smsd: outgoing file checker has started.
2009-11-12 11:30:12,6, GSM1: Modem handler 0 has started.
2009-11-12 11:30:13,6, smsd: Moved file /var/spool/sms/outgoing/send_mNZxHa to /var/spool/sms/checked
2009-11-12 11:30:13,6, smsd: I have to send 1 short message for /var/spool/sms/checked/send_iUegPD
2009-11-12 11:30:13,6, GSM1: Sending SMS from  to 627934648
2009-11-12 11:30:13,6, GSM1: Checking if modem is ready
2009-11-12 11:30:13,7, GSM1: -> AT
2009-11-12 11:30:13,7, GSM1: Command is sent, waiting for the answer
2009-11-12 11:30:14,7, GSM1: <- AT
OK
2009-11-12 11:30:14,6, GSM1: Checking if modem needs PIN
2009-11-12 11:30:14,7, GSM1: -> AT+CPIN?
2009-11-12 11:30:14,7, GSM1: Command is sent, waiting for the answer
2009-11-12 11:30:14,7, GSM1: <- AT+CPIN?
+CPIN: SIM PIN
OK
2009-11-12 11:30:14,5, GSM1: Modem needs PIN, entering PIN...
2009-11-12 11:30:14,7, GSM1: -> AT+CPIN="2920"
2009-11-12 11:30:14,7, GSM1: Command is sent, waiting for the answer
2009-11-12 11:30:15,7, GSM1: <- AT+CPIN="2920"
OK
2009-11-12 11:30:15,7, GSM1: -> AT+CPIN?
2009-11-12 11:30:15,7, GSM1: Command is sent, waiting for the answer
2009-11-12 11:30:15,7, GSM1: <- AT+CPIN?
+CPIN: READY
OK
2009-11-12 11:30:15,6, GSM1: PIN Ready
2009-11-12 11:30:15,6, GSM1: Checking if Modem is registered to the network
2009-11-12 11:30:15,7, GSM1: -> AT+CREG?
2009-11-12 11:30:15,7, GSM1: Command is sent, waiting for the answer
2009-11-12 11:30:16,7, GSM1: <- AT+CREG?
+CREG: 0,2
OK
2009-11-12 11:30:16,5, GSM1: Modem is not registered, waiting 10 sec. before retrying

2009-11-12 11:30:26,7, GSM1: -> AT+CREG?
2009-11-12 11:30:26,7, GSM1: Command is sent, waiting for the answer
2009-11-12 11:30:26,7, GSM1: <- AT+CREG?
+CREG: 0,5
OK
2009-11-12 11:30:26,6, GSM1: Modem is registered to a roaming partner network
2009-11-12 11:30:26,6, GSM1: Selecting PDU mode
2009-11-12 11:30:26,7, GSM1: -> AT+CMGF=0
2009-11-12 11:30:26,7, GSM1: Command is sent, waiting for the answer
2009-11-12 11:30:26,7, GSM1: <- AT+CMGF=0
OK
2009-11-12 11:30:26,7, GSM1: -> AT+CMGS=94
2009-11-12 11:30:26,7, GSM1: Command is sent, waiting for the answer
2009-11-12 11:30:27,7, GSM1: <- AT+CMGS=94
>
2009-11-12 11:30:27,7, GSM1: -> 001100099126974346F900F1FF5CC8373BCC0295E7F437A83C07D5DDA076D93D0FABCBA069730A2297417079BD2C0EBB406779789C0ECF41F0B71C44AF83C66FB7391D76EBC32C503B3C46BFE96516081E7693DFF230C8D89C82E4EFF17A0E�
2009-11-12 11:30:27,7, GSM1: Command is sent, waiting for the answer
2009-11-12 11:30:31,7, GSM1: <- 001100099126974346F900F1FF5CC8373BCC0295E7F437A83C07D5DDA076D93D0FABCBA069730A2297417079BD2C0EBB406779789C0ECF41F0B71C44AF83C66FB7391D76EBC32C503B3C46BFE96516081E7693DFF230C8D89C82E4EFF17A0E�
+CMGS: 0
OK
2009-11-12 11:30:31,5, GSM1: SMS sent, To: 627934648
2009-11-12 11:30:31,6, smsd: Deleted file /var/spool/sms/checked/send_iUegPD
2009-11-12 11:30:32,6, smsd: I have to send 1 short message for /var/spool/sms/checked/send_mNZxHa
2009-11-12 11:30:32,6, GSM1: Sending SMS from  to 34627934648
2009-11-12 11:30:32,7, GSM1: -> AT+CMGS=29
2009-11-12 11:30:32,7, GSM1: Command is sent, waiting for the answer
2009-11-12 11:30:33,7, GSM1: <- AT+CMGS=29
>
2009-11-12 11:30:33,7, GSM1: -> 0011000B914326974346F900F1FF11D0B09BFC968741C6E614247F8FD773�
2009-11-12 11:30:33,7, GSM1: Command is sent, waiting for the answer
2009-11-12 11:30:36,7, GSM1: <- 0011000B914326974346F900F1FF11D0B09BFC968741C6E614247F8FD773�
+CMGS: 1
OK
2009-11-12 11:30:36,5, GSM1: SMS sent, To: 34627934648
2009-11-12 11:30:36,6, smsd: Deleted file /var/spool/sms/checked/send_mNZxHa

Finally, some tasks to could do to ensure the operation for the future:

最後に、今後のために次の対応をしておきます。

1. Set 1 to loglevel in /etc/smsd.conf to avoid a very big, non-necessary log file.

1. 不必要にログファイルが巨大にならないように、/etc/smsd.conf のログレベルを 1 にします。

2. Be sure that smsd is set to start automatically when system restart (this means a link to /etc/init.d/sms to /etc/rc2.d/S90sms or /etc/rc.d/rc2.d/S90sms). If you have installed it from a package, probably they exist already in your system, just checkit.

2. システムが再起動したときに smsd が自動起動するように設定(/etc/init.d/sms を /etc/rc2.d/S90sms または、/etc/rc.d/rc2.d/S90sms へリンク)しておきます。パッケージからインストールした場合は、おそらくすでに設定されていますので、確認してください。

Pandora FMS アラートの設定

This steps reproduce the basic steps to create SMS alerts in Pandora FMS 3.x

Pandora FMS で SMS アラーとを作成する基本的な手順を示します。

Create the command:

コマンドを作成します。

SMSStep2.png

Create the action:

アクションを作成します。

SMSStep3.png


Associate the action to a module using a previous alert template. In this case, alert template will be fired when the module status would be CRITICAL.

アクションをアラートテンプレートを使ってモジュールに割り当てます。この場合、モジュールが障害状態になったときに送信するアラートテンプレートです。

SMSStep4.png

一般的なハードウエアおよび Gnokii を使って SMS を送信するためのゲートウェイ

This method describe an alternative way to send SMS instead using smstools, using gnokii. This was the "old" method proposed for pandora 1.x and 2.x and it's written here only to have a second option. smstools method provided above is preferred.

ここでは、smstools を利用するのではなく、gnokii を使う別の SMS 送信方法を説明します。これは、Pandora 1.x および 2.x の頃の古い手法です。ここでは 2つ目のオプションとして記載します。上記の smstools を使った手法の方が良いです。

This section describes how to build a SMS sending gateway based in a sending queue. This way, it is possible to implement a SMS sending server, connected with a mobile and sending the SMS through the software of the Gnokii project, and different remote servers can send its messages in order the SMS sending server could process them. This allow that different Pandora FMS servers (or another machines that want to use the gateway) could send messages in a centralized way, without having to have a mobile for each server.

この項では、送信キューにもとづいた、SMS 送信ゲートウェイを構築する方法を説明しています。この方法では、携帯を接続し、Gnokii プロジェクトのソフトウエアを通して SMS を送信する SMS 送信サーバを実装します。また、SMS 送信には、別のリモートサーバを利用できます。これにより、異なる Pandora FMS サーバから、それぞれに携帯を接続することなく、メッセージを送信することができます。

In first place, you should create an «sms» user in the machine where you want to install it in the SMS sending gateway. After this, create the directories home/sms y /home/sms/incoming. If you want to use the SMS sending gateway from another machines, you will need to make accessible the directory /home/sms/incoming for other servers through any file sending system or file systems partition:NFS, SMB, SSH (scp), TCP or Tentacle.

最初に、SMS 送信ゲートウェイをインストールしたいマシンに sms ユーザを作成する必要があります。その後、home/sms および /home/sms/incoming ディレクトリを作成します。他のマシンから SMS 送信ゲートウェイを利用したい場合は、(NFS, SMB, SSH(scp), TCP や Tentacle 等の)何らかのファイル送信の仕組みで /home/sms/incoming ディレクトリにアクセスできる必要があります。

The SMS sending gateway mechanism is very easy: for each file that is at the directory /home/sms/incoming, an SMS will be processed, deleted and sent, with the file content. This file should have an specific format, which is detailed here:

SMS 送信ゲートウェイの仕組みはとても簡単です。送信ファイルを /home/sms/incoming ディレクトリに置くだけで、SMS が処理されます。送信したファイルは削除されます。このファイルは特別なフォーマットになっており、以下の通りです。

Phonenumber|SMSText

SMS ゲートウェイの実装

You should create four scripts:

4つのスクリプトを作成する必要があります。

SMS: Script that sends the SMS using Gnokii through an USB data cable.This script is only in the system where the sending gateway is (the system that has the data cable connected to a GSM mobile).

SMS: USBケーブルを通して Gnokii を使って SMS を送信するスクリプトです。スクリプトはゲートウェイとして送信するシステム(GSM携帯に接続したシステム)にのみ置きます。

SMS_GATEWAY: Script that process in a periodical way the entry directory (/home/sms/incoming), processing files that are waiting to be send. This script is only in the system that is used as sending gateway.

SMS_GATEWAY: 送信待ちのファイルが置かれる入力ディレクトリ(/home/sms/incoming)内のファイルを定期的に処理するスクリプトです。このスクリプトは、ゲートウェイとして送信するシステムにのみ設置します。

SMS_GATEWAY_LAUNCHER: launcherScript for the SMS_GATEWAY script(start and stop daemon). This script is only in the system that does the sending gateway.

SMS_GATEWAY_LAUNCHER: SMS_GATEWAY スクリプトを起動するための(デーモンとして起動・停止する)スクリプトです。このスクリプトは、ゲートウェイとして送信するシステムにのみ設置します。

COPY_SMS: copies an SMS using the scpcommand from a client system to a gateway system. Uses the TELEPHONE as first parameter, and the second as text to send (using ""for specifying each parameter).The script trust in the SSH automatic autentication and in the «sms» user for the transfer. In the local system you can remplace the «scp» for the «cp» command or use a system like Tentacle to transfer the file.

COPY_SMS: SMS を scp コマンドを使って、クライアントシステムからゲートウェイにコピーします。最初のパラメータとして、TELEPHONE を指定し、2番目に送信するテキストを指定します(各パラメータは、"" でくくります)。スクリプトは、転送のために sms ユーザでの ssh 無認証ログインを利用します。ローカルのシステムでは、scp を cp に置き換えたり、Tentacle などの転送プログラムを利用することもできます。

SMS

This is the script that sends SMS using Gnokii. You should have Gnokii well configured (using the file /etc/gnokii.confor similar). Probably should be the user root to could launch the script, or establish the SETUIDO in the gnokii binary.

これは、Gnokii を使って SMS を送信するスクリプトです。(/etc/gnokii.conf にて)設定済みの Gnokii が必要です。スクリプトは、root 権限で起動する必要がまります。または、gnokii バイナリで SETUID します。

#!/bin/bash
texto=$1
number=$2
if [ $# != 2 ]; then
echo "I need more parameters"
exit 1;
fi
/bin/echo $1 | /usr/local/bin/gnokii --sendsms $2 

SMS ゲートウェイ

This is the gateway daemon script:

これはゲートウェイデーモンのスクリプトです。

#!/bin/bash

INCOMING_DIR=/home/sms/incoming
HOME_DIR=/home/sms

while [ 1 ]
do

        for a in `ls $INCOMING_DIR`
        do
                if [ ! -z "$a" ]
                then 
                        NUMBER=`cat $INCOMING_DIR/$a | cut -d "|" -f 1`
                        MESSAGE=`cat $INCOMING_DIR/$a | cut -d "|" -f 2`
                        TIMESTAMP=`date +"%Y/%m/%d %H:%M:%S"`
                        echo "$TIMESTAMP Sending to $NUMBER the message $MESSAGE" >> $HOME_DIR/sms_gateway.log
                        $HOME_DIR/sms "$MESSAGE" "$NUMBER"
                        echo "$TIMESTAMP Deleting $a" >>  $HOME_DIR/sms_gateway.log
                        rm -Rf $INCOMING_DIR/$a
                        sleep 1
                fi
        done
        sleep 5
done

SMS ゲートウェイの起動

This is the launching script form the sms_gateway:

これは、sms_gateway を起動するスクリプトです。

#!/bin/bash

# SMS Gateway, startup script
# Sancho Lerena, <slerena@gmail.com>
# Linux Version (generic)

# Configurable path and filenames
SMS_GATEWAY_HOME=/home/sms
SMS_PID_DIR=/var/run
SMS_PID=/var/run/sms.pid

# Main script

if [ ! -d "$SMS_PID_DIR" ]
then
        echo "SMS Gateway cannot write it's PID file in $SMS_PID_DIR. Please create directory or assign appropiate perms"
        exit
fi

if [ ! -f $SMS_GATEWAY_HOME/sms_gateway ]
then
        echo "SMS Gateway not found, please check setup and read manual"
        exit
fi

case "$1" in
  start)
        OLD_PATH="`pwd`"
        if [ -f $SMS_PID ]
        then
                CHECK_PID=`cat $SMS_PID`
                CHECK_PID_RESULT=`ps aux | grep -v grep | grep "$CHECK_PID" | grep "sms_gateway" | wc -l`
                if [ $CHECK_PID_RESULT == 1 ]
                then
                        echo "SMS Gateway is currently running on this machine with PID ($CHECK_PID). Aborting now..."
                        exit
                fi
        fi

        nohup $SMS_GATEWAY_HOME/sms_gateway > /dev/null 2> /dev/null & 2> /dev/null > /dev/null
        sleep 1

        MYPID=`ps aux | grep "$SMS_GATEWAY_HOME/sms_gateway" | grep -v grep | tail -1 | awk '{ print $2 }'`
        if [ ! -z "$MYPID" ]
        then
                echo $MYPID > $SMS_PID
                echo "SMS Gateway is now running with PID $MYPID"
        else
                echo "Cannot start SMS Gateway. Aborted."
        fi
        cd "$OLD_PATH"
        ;;
  stop)
        if [ -f $SMS_PID ]
        then
           echo "Stopping SMS Gateway"
           PID_2=`cat $SMS_PID`
           if [ ! -z "`ps -F -p $PID_2 | grep -v grep | grep 'sms_gateway' `" ]
           then
               kill `cat $SMS_PID` 2> /dev/null > /dev/null
           else
               echo "SMS Gateway is not executing with PID $PID_2, skip Killing step"
           fi
           rm -f $SMS_PID
        else
          echo "SMS Gateway is not running, cannot stop it."
        fi
        ;;
  force-reload|restart)
        $0 stop
        $0 start
        ;;
  *)
        echo "Usage: sms_gateway {start|stop|restart}"
        exit 1
esac

Sms のコピー

This small script creates a SMS sending file in a client machine and copies it to the SMS gateway using scp:

これは、クライアントマシンで送信する SMS を作成し、SMS ゲートウェイへ scp を用いてコピーするスクリプトです。

#!/bin/bash

SERIAL=`date +"%j%M%s"`
SERIAL=`hostname`_$SERIAL

TEL=$1
TEXT=$2

echo $TEL\|$TEXT >> /tmp/$SERIAL
scp /tmp/$SERIAL sms@192.168.1.1:/home/sms/incoming
rm -Rf /tmp/$SERIAL1