流程概述:(以服务为例)
nagios检测服务发现异常
==>根据service里面的contact_groups和确定法告警的目标
==>根据上一步的contact_groups设置的members找到contact
==>根据contact里面的service_notification_commands来确定发送告警的方式。
==>执行命令(command)告警
 
详细:
1,在service的定义里面(define service{})加上以下句子
notifications_enabled           1;
contact_groups            admins ;(这是默认情况,group定义可以在 contacts.cfg中查看。你也可以定制自己的group,确认你要发送告警的contact在group里面。)
2,在contact的定义里面(define contact{})加上以下句子
 pager     13XXXXXXXXX;(为什么是pager?难道是command里面的参数 $CONTACTPAGER$ ?)
service_notification_commands   notify-service-by-email,notify-service-by-fetion  ;(不同告警命令用‘,’隔开。)
host_notification_commands      notify-host-by-fetion   ;
        ***注意到define contact{}里面会有这样一句话:
        use                         generic-contact;(这是默认定义,可以在templates.cfg
        里面查看。)
        所以以上的两个notification_commands 也可以在generic-contact里面定义。
3,添加fetion的command,格式可以参考commands.cfg中的描述。以下是我的定义
define command{
        command_name    notify-host-by-fetion
        command_line    $USER1$/fetion.sh $CONTACTPAGER$ "$NOTIFICATIONTYPE$ alert -Host $HOSTNAME$ is $HOSTSTATE$"
}
define command{
        command_name    notify-service-by-fetion
        command_line    $USER1$/fetion.sh $CONTACTPAGER$ "$NOTIFICATIONTYPE$: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$"
}

fetion.sh是我们创建的飞信脚本,放在nagios/libexec目录下。内容如下
#!/bin/sh
receiver=$1
messages=$2
echo $receiver $messages>>/usr/local/nagios/fetion.log
LD_LIBRARY_PATH=/usr/local/nagios/fetion /usr/local/nagios/fetion/fetion  --mobile=13xxxxxxxxx --pwd='password' --to="$receiver" --msg-utf8="$messages"> $result1
cat $result1
rmsg1=`grep -i -cE "busy here|Request Failure" $result1`
resultt1=`cat $result1`
if [ "$rmsg1" -ge 1 ] || [ -z "$resultt1" ]; then
          LD_LIBRARY_PATH=/usr/local/nagios/fetion /usr/local/nagios/fetion/fetion  --mobile=13xxxxxxxxx --pwd='password' --to="$receiver" --msg-utf8="$messages "#第二个手机号码
fi