十一、Nagios使用飞信短信报警

1.安装飞信机器人

将下载下来的fetion20091117-linux.tar.gz、fetion放在/tmp下

cd /usr/local

tar -zxvf /tmp/fetion20091117-linux.tar.gz    //将fetion解压到/usr/local下

mv fx fetion       //将安装目录更名为fetion

cp /tmp/fetion /usr/local/fetion/       //将fetion文件替换成fetion补丁文件

# 必须将libACE-5.7.2.so、libACE_SSL-5.7.2.so、libcrypto.so.4、libssl.so.4四个文件copy到/lib目录下,因为fetion是默认到/lib下找这四个文件,否则fetion将无法启动。

cp /usr/local/fetion/libACE-5.7.2.so /lib/

cp /usr/local/fetion/libACE_SSL-5.7.2.so /lib/

cp /usr/local/fetion/libcrypto.so.4 /lib/

cp /usr/local/fetion/libssl.so.4 /lib/

2.测试飞信安装是否成功

root@web74 fetion]# ./fetion

出现跟下面一样的内容则表示安装成功

************************ IMPORTANT STATEMENT ************************

 **                                                                 **

 **   PLEASE DON'T USE THIS SOFTWARE TO SEND JUNK SHORT MESSAGES.   **

 **   OTHERWISE PLEASE BEAR YOUR OWN CONSEQUENCES.                  **

 **                                                                 **

 **                                Version:[20100721003-linux]      **

 *********************************************************************

 This program is the console version of China Fetion!

 It's free for personal user.

 This project website: http://www.it-adv.net/

 

 AUTHOR:KelvinH MSN/EMAIL:shichangguo@msn.com

 

 Usage:

    --mobile=[mobile]

    --sid=[sid]

    --pwd=[pwd]

    --config=[config file] *format:index mobile password

    --index=[index no in config file,refer to sample.conf]

 

    --debug  *debug mode on

    --hide  *login fetion in hidden state

    --to=[mobile/sid]

    --add=[uri]

    --command-path=[command file path]

    --robotmode

    --daemon(linux only)

    --proxy-ip(http proxy ip)

    --proxy-port(http proxy port)

    --msg-gb=[gb2312/gbk message]

    --msg-utf8=[utf8 message]

    --msg-type=[0/1/2/3 sms longsms smartmsg mms]

    --file-gb=[gb2312/gbk file]

    --file-utf8=[utf8 file]

    --query-cmcc-no

    --testaccount

    --auto-retry

    --get-web-session

    --action=getpiccode --mobile=13910000000 --pwd=[pwd] (--piccode-url=[url])

    --action=appsubscribe --mobile=[mobile] --pwd=[pwd] --pic-certificate-id=[certid] --pic-cert-code=[certcode] --apply-sub-service-url=[url]

    --action=subscribe --mobile=[mobile] --pwd=[pwd] --sms-code=[smscode] --subscribe-url=[url]

    --action=updatepwd --mobile=[mobile] --pwd=[pwd] --sms-code=[smscode] --update-pwd-url=[url]

3.编写发送短信的脚本

vi /usr/local/fetion/sendsms.sh

-------------------------------------――

#!/bin/sh

fetionDir=/usr/local/fetion

cd $fetionDir

DIR=`pwd`

# 设置发短信的号码和飞信登录密码

user=159xxxxxxxx

pwd=x123dsl5dow

 

for phone in `cat $DIR/phonelist.txt`

do

echo "$phone" | sed '/^[ \t]*$/d' | sed 's/^[ \t]*//' | sed 's/[ \t]*$//' | grep '^1[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'

if (($? == 0 ));then

if [[ -f $DIR/msg.txt ]];then

cat /dev/null > msg.txt

fi

phone=`echo "$phone" | sed 's/^[ \t]*//' | sed 's/[ \t]*$//'`

echo "sms $phone $1" >> $DIR/msg.txt

echo "quit" >> $DIR/msg.txt

# 下面行定义飞信发送报警短信的命令

$fetionDir/fetion --mobile=$user --pwd=$pwd --to=$phone --msg-utf8="$1"

else

continue

fi

done

---------------------------------------

 

# phonelist.txt为接收短信号码列表,必须是发送飞信用户的好友

# 在此控制短信接收者面不是在nagios联系人中,好处是修改接收者后不需要重启nagios

# 可以使用#号注释接收者的号码以屏蔽接收者

vi /usr/local/fetion/phonelist.txt

# Phone NO.1

136xxxxxxxx

# Phone NO.2

159xxxxxxxx

 

#修改飞信目录权限(否则运行Nagios的用户不能写入信息内容到/usr/local/fetion/msg.txt)

chown -R nagios.nagios /usr/local/fetion

chmod +x /usr/local/fetion/sendsms.sh

chmod +x /usr/local/fetion/fetion

4.配置Nagios

1).定义发送飞信报警短信的命令

vi /usr/local/nagios/etc/objects/commands.cfg

#########################################################################

#

# notify-host-by-sendmsg/notify-service-by-sendmsg //定义飞信发送报警短信的命令

#

#########################################################################

# 下面是定义系统报警短信命令

define command {

command_name notify-host-by-sendmsg

command_line /usr/local/fetion/sendsms.sh "Host $HOSTSTATE$ alert for $HOSTNAME$($HOSTADDRESS$) on $TIME$."

}

 

# 下面是定义服务报警短信命令

define command {

command_name notify-service-by-sendmsg

command_line /usr/local/fetion/sendsms.sh ""$TIME$":$SERVICEDESC$($HOSTADDRESS$) is $SERVICESTATE$."

}

2).定义联系人模板

vi /usr/local/nagios/etc/objects/templates.cfg

define contact{

        name sendmsg-contact ; The name of this contact template

       

        service_notification_period     24x7                    ; service notifications can be sent anytime

        host_notification_period        24x7                    ; host notifications can be sent anytime

        service_notification_options    w,u,c,s             ; send notifications for all service states, flapping events, and scheduled downtime events

        host_notification_options       d,u,s               ; send notifications for all host states, flapping events, and scheduled downtime events

 

        service_notification_commands notify-service-by-sendmsg ; 使用定义的飞信报警命令

        host_notification_commands notify-host-by-sendmsg ; 使用定义的飞信报警命令

        register 0 ; DONT REGISTER THIS DEFINITION ¨C ITS NOT A REAL CONTACT, JUST A TEMPLATE!

}

3).定义联系人及修改联系人组

vi /usr/local/nagios/etc/objects/contacts.cfg

# 下面是定义接收报警短信的联系人,之前已经创建了接收短信的号码文件,所以此处无需再添加联系人的手机号码

define contact{

contact_name msgreceiver ; Short name of user

use sendmsg-contact ; 使用上面定义的联系人模板

alias MsgReceiver ; Full name of user

email xuanding@yxqz.net

 

将新添加的联系人增加到联系人组里,将msgreceiver增加到联系人组的members行后面,联系人中间用,分隔

5.测试故障时是否能够触发短信报警

[root@localhost fetion]# /usr/local/fetion/sendsms.sh "nagios Host alert for"

#显示下面信息则代表短信正常发送出去了

159xxxxxxxx

Send Msg to:

TP=3 ID=823479704   LO=0 SU=0 RE=0 SI=423500854 SE=6764  MO=159xxxxxxxx GR=      ST=101  RE=1 OL=499  NN=15986367479LN=

SIP-C/2.0 280 Send SMS OK

T: sip:423500854@fetion.com.cn;p=6764

I: 2

Q: 1 M

D: Tue, 21 Sep 2010 06:40:58 GMT

XI: bc00ddb33ee84def8ca7ee0d42401e2a

短信正常收到,则测试OK。