21 июня 2017

Простой мониторинг SIP транка с оповещением через Telegram

Скрипт на баше проверяет состояние SIP транка и, в случае падения транка больше чем на 2 минуты, отправляет оповещение через Telegram. Попутно производится попытка транк реанимировать.


















Для работы скрипта понадобится Telegram бот. Если у тебя его еще нет, то поговори с папой- BotFather.
Скрипт можно запускать через Cron, сделав небольшие изменения в коде(убрать цикл как минимум), но я демонизирую его с помощью supervisor.
#!/bin/bash

CHATID="1122333" # ID контака или группы телеграм для отправки оповещений
KEY="AAAAAASSSSSSDDDDDDFFFFFGGGGGHHHHHJJJJJKKKKLLL" # Ключ телеграм-бота
TIME="20"
URL="https://api.telegram.org/bot$KEY/sendMessage"

TEXTDW="Упал SIP транк"
TEXTUP="Транк снова в работе"

FAILS=0
ALERTSTAT=0

while true; do

    reg_tranks=`/usr/sbin/asterisk -rx 'sip show registry'| grep Registered |wc -l`

    if [ "$reg_tranks" == "0" ];
        then
            FAILS=$((FAILS+1))
            sleep 5
            echo `/usr/sbin/asterisk -rx "sip reload"` #Пробуем поднять транк

    elif [ "$reg_tranks" == "1" ] && [ "$ALERTSTAT" == "1" ] && [ "$FAILS" == "0" ];
        then
            curl -s --max-time $TIME -d "chat_id=$CHATID&disable_web_page_preview=1&text=$TEXTUP" $URL >/dev/null
            ALERTSTAT=0
            FAILS=0

    elif [ "$reg_tranks" == "1" ];
        then
            FAILS=0
    fi
    
    if [ "$FAILS" == "2" ] && [ "$ALERTSTAT" == "0" ];
        then
            curl -s --max-time $TIME -d "chat_id=$CHATID&disable_web_page_preview=1&text=$TEXTDW" $URL >/dev/null
            ALERTSTAT=1
    fi

    sleep 60
done