Pull to refresh

Примитивный мониторинг портов с смс оповещением

Reading time2 min
Views4K
image

Вопрос удаленного мониторинга сервисов компании для меня всегда стоял очень остро. И чего я только не пробовал. Nagios, Zenoss, Zabbix и пр. сменяли друг друга поражая своими возможностями и набором функций. Обещали просканировать, охватить и бдить денно и нощно, а в случае чего оповещать тут же. Но к сожалению мне всегда не хватало времени на настройку этих комбайнов, а мониторинг был нужен тут и сейчас. Поэтому однажды я сел и написал следующий скрипт.

Принцип работы прост. Скрипт запускается через определенный промежуток времени и телнетом соединяется с ресурсами из списка. После трех «неответов» отправляется смска.

Условия работы:
Платформа — Ubuntu 11.04 (скорее всего будет работать и в других версиях Linux).
Сервис оповещений — smstools (если не стоит — sudo apt-get install smstools).
Подключенный через USB кабель GSM телефон.
Вид файла ресурсов — host port 0
Например
ya.ru 80 0
mail.ru 110 0

Компьютер со скриптом должен смотреть в интернет через другого провайдера.

Мой скрипт запускается каждые три минуты из crontab.
*/3 * * * * '/opt/portmonitor/telneter'

Ниже сам код. Как всегда строго не судите, сами мы не программеры.

#!/bin/bash

path=/opt/portmonitor/
logfile=/var/log/portmon

fulltext=(`cat $path/ipbase.txt`)
check=(`cat $path/count.txt`)

rm $path/count.txt
a=0
b=`expr $a + 1`
e=`expr $b + 1`

while [ ${fulltext[$a]} ]
do
send=(${fulltext[$a]}":"${fulltext[$b]}"-"'not answer 3 time')
elem=("${fulltext[$a]}"\ "${fulltext[$b]}")
################subroutines####################################
bad (){

if [ "${check[$e]}" -lt "2" ];then

zap[$i]=$elem
((check[$e]++))
#echo 'schetchik +:'${check[$e]}
echo "${zap[$i]}"\ "${check[$e]}">>$path/count.txt
((i++))
a=`expr $a + 3`
b=`expr $b + 3`
e=`expr $e + 3`

elif [ "${check[$e]}" -eq "2" ];then
zap[$i]=$elem
((check[$e]++))
echo "${zap[$i]}"\ "${check[$e]}">>$path/count.txt
gsmsendsms -d /dev/ttyACM0 +79xxxxxxxxx "$send"
gsmsendsms -d /dev/ttyACM0 +79xxxxxxxxx "$send"
gsmsendsms -d /dev/ttyACM0 +79xxxxxxxxx "$send"
echo "`date` $send" >>$logfile

((i++))
a=`expr $a + 3`
b=`expr $b + 3`
e=`expr $e + 3`

else
zap[$i]=$elem
echo "${zap[$i]}"\ "${check[$e]}">>$path/count.txt
((i++))
a=`expr $a + 3`
b=`expr $b + 3`
e=`expr $e + 3`
fi
}

good () {
zap[$i]=$elem
check[$e]=0
echo "${zap[$i]}"\ "${check[$e]}">>$path/count.txt
((i++))
a=`expr $a + 3`
b=`expr $b + 3`
e=`expr $e + 3`
}
#################endsubroutines####################################
nc -w2 -z ${fulltext[$a]} ${fulltext[$b]} && good || bad

done


Если кому-то будет не хватать интерактивности можно вывести на экран своеобразный мониторчик:

watch cat /opt/portmonitor/count.txt

Получиться примерно такая статистика
image

Единички говорят о том, что данные порты у ресурсов недоступны.
Tags:
Hubs:
+4
Comments11

Articles