Нотификация/оповещение из Nagios через Asterisk

Эта статья о том как подключить Nagios к Asterisk

Для чего всё это надо? Идея состоит в том, чтобы получать автоматичские уведомления на телефон при срабатывании пробников.

Итак, приступаем.

Создадим темплейт контакта:

define contact{

name contact-by-sip ; 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 c ; critical

host_notification_options d ; down

 

service_notification_commands notify-service-by-sip ; send service notifications via sip

host_notification_commands notify-host-by-sip ; send host notifications via sip

register 0 ; ITS NOT A REAL CONTACT, JUST A TEMPLATE!

}

...

И сам контакт:

define contact{

contact_name nagios-sip

use contact-by-sip

alias Nagios Sip

email Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.

address2 SIP/37327@cucm1

}

Команда нотификации:

define command{

command_name notify-host-by-sip

command_line $USER1$/notify-by-sip.sh $CONTACTADDRESS2$ "HOST" $NOTIFICATIONTYPE$ $HOSTNAME$ H_$HOSTEVENTID$

}

 

define command{

command_name notify-service-by-sip

command_line $USER1$/notify-by-sip.sh $CONTACTADDRESS2$ "SERVICE" $NOTIFICATIONTYPE$ $HOSTALIAS$ S_$SERVICEEVENTID$

}

И описание сервиса:

define service{

use my_graph-service-template-1min

host_name test.ru

service_description PING

check_command check_ping!200.0,20%!500.0,60%

contacts nagios-sip

max_check_attempts 5

}

Исходящий вызов будем совершать с использованием так называемых ".call" файлов. Это текстовые файлы, которые надо поместить в директорию outgoing на сервере астериска, которая в настройках Asterisk прописана так чтобы совершить исходящий вызов автоматически. Однако настройка asterisk не тема этой статьи.

Пример скрипта, генерирующего файл .call приведен ниже. Также приведен пример экстена (exten) для Asterisk.

#!/bin/bash

channel=$1

alarm_hs=$2

alarm_type=$3

alarm_hostname=$4

alarm_id=$5

mytmpfile=`mktemp /tmp/nagios_call/nagios_$alarm_id.XXXX`

mytmpfile=$mytmpfile."call"

file_name_only=`echo $mytmpfile | sed -e 's/.*\///g'`

CDR=`echo $channel | sed -e 's/.*\///g' | sed -e 's/@.*$//g'`

 

if [ "$alarm_type" = "ACKNOWLEDGEMENT" ]

then

echo `date` >> /tmp/nagios_call/logging.txt

echo "$alarm_hs, $alarm_type, $alarm_hostname" >> /tmp/nagios_call/logging.txt

exit 0

fi

 

if [ "$alarm_hs" = "SERVICE" ]

then

data_wav="otkaz_servisa_na_servere"

fi

if [ "$alarm_hs" = "HOST" ]

then

data_wav="otkaz_servera"

fi

 

echo "Channel: $channel

CallerID: ALARM

MaxRetries: 5

RetryTime: 10

WaitTime: 23

Account: callback_nagios

Context: callback_nagios

Extension: 911

Priority: 2

Set: file=$data_wav&$alarm_hostname

AlwaysDelete: Yes

Archive: Yes" > $mytmpfile

 

host="ip address"

port="21"

user="nagios"

pass="passsword"

file="$mytmpfile"

ufile="//$file_name_only"

 

echo "put $file $ufile" >> /tmp/nagios_call/test_script.txt

 

echo `date` >> /tmp/nagios_call/logging.txt

echo "$alarm_type" >> /tmp/nagios_call/logging.txt

echo "

verbose

open $host

user $user $pass

bin

put $file $ufile

bye

" | ftp -n >>/tmp/nagios_call/logging.txt 2>&1 &

В Asterisk примерно следующее:

[callback_nagios]

exten => 911,1,Answer

exten => 911,2,Playback(/var/spool/alarm/${file})

exten => 911,3,Hangup

 

Другая статья о настройке системы оповещения Nagios через Asterisk

 

Обновлено 06.04.2016 21:53

unix-way