Dzisiaj jest czw mar 28, 2024 9:05 pm


Monitorowanie urzadzen z inform. via email i SMS (aptest.sh)

Często zadawane pytania
  • Autor
  • Wiadomość
Offline

Pyxis

Site Admin

  • Posty: 2137
  • Rejestracja: pn wrz 29, 2008 11:40 pm
  • Lokalizacja: Strzegom

Monitorowanie urzadzen z inform. via email i SMS (aptest.sh)

Postndz lis 13, 2016 7:05 pm

Od wersji 4.23 istnieje mozliwosc centralnego monitorowania wybranych urzadzen infrastruktury i w wybranych opcjach powiadamiania poprzez email lub wiadomosc SMS o zmianie statusu danego urzadzenia na "Down" oraz jesli wybierzemy odpowiednia opcje powiadaminia o zmianie statusu rowniez na "Up". Monitoring realizuje skrypt napisany w bashu (aptest.sh) uruchamiany na maszynie linuxowej. Nie musi to byc maszyna na ktorej znajduje sie nasza baza danych Pyxisa.

Obrazek

Zmian konfiguracyjnych do konujemy w konfiguracji Pyxisa w zakladce Inne. Po zatwierdzeniu konfiguracji kolejne uruchomienie skryptu nastapi z nowymi parametrami.

Obrazek

Adres IP umieszczony w polu "IP kontrolne" to adres ktory jest sprawdzany wraz z urzadzeniem monitorowanym. Jesli ten IP nie odpowiada (np uszkodzeniu uleglo jakies centralne urzadzenie naszej seci, to nie jest generowana "lawina" powiadomien o innych urzadzeniach zaleznych od niego.
Podobna funkcje ma opcja "Sprawdzaj wzgledem miejsca podlaczenia" (pominiecie tej opcji lub niewskazanie urzadzenie nadrzednego dla urzadzenia sprawdzanego skutkuje sprawdzaniem wlasnie wzgledem IP kontrolnego). Takie ustawienie w przypadku awarii generuje powiadomienie tylko o pierwszym urzadzeniu ktore uleglo awarii pomijajac wszystki ktore w strukturze znajduja sie za nim (widac to ladnie na drzewie infrastruktury). Dostajemy informacje ktore urzadzenie "zawinilo" bezposrednio.
Awaria jest zglaszana, jesli kazda ze wskazanej w konfiguracji ilosci prob zakonczy sie uplynieciem czasu oczekiwania (domyslnie 1000ms).

Skrypt znalezc mozna w katalogu programu lub pobrac:
http://pyxisisp.pl/download/aptest.sh

Uzupelniamy swoje dane dostepowe do bazy Pyxisa i uruchamiamy w cron'ie co jedna minute. Skrypt ma zabezpieczenie i nie uruchomi sie dopoty, dopoki jedna jego instancja nie zakonczy sprawdzania i zapisu do bazy.
Do powiadomien via SMS potrzebna jest skonfigurowana i dzialajaca bramka SMS z poziomu Pyxisa.

Kod: Zaznacz cały
#!/bin/sh
#
# aptestmysql.sh - monitorowanie wybranych urzadzen infrastruktury
#      i wysylanie powiadomien ma email
#
#############################################################################
# (c) 2016 Piotr Szkut PYXIS4SQL   - v1.0  dla  PYXIS4SQL  od  wersji 4.23  #
#############################################################################
START=`date +%s`


# Dostep do bazy MySQL Pyxisa
BAZA=PYXIS4SQL               # Nazwa bazy danych
USER=pyxis               # Uzytkownik bazy
HASLO=mojetajnehaslo            # Haslo
HOST=localhost               # Adres IP komputera na którym znajduje sie baza

# Parametry polecenia ping
SIZE=64                  # Rozmiar pakietu
WAIT=0.2               # Czas pomiedzy kolejnymi probami [s] (0.2 = 200 [ms])


# Jesli nie wiesz co robisz, to nizej lepiej nie grzebac :-)
#############################################################################
PARENT=$(mysql $BAZA -u $USER -p$HASLO -h $HOST -se "select I_VALUE from INI where I_IDENT='AptestParent' and I_OPERATOR=0";)
LOCAL2=$(mysql $BAZA -u $USER -p$HASLO -h $HOST -se "select I_VALUE from INI where I_IDENT='AptestLocal2' and I_OPERATOR=0";)
COUNT=$(mysql $BAZA -u $USER -p$HASLO -h $HOST -se "select I_VALUE from INI where I_IDENT='AptestCount' and I_OPERATOR=0";)
SMSON=$(mysql $BAZA -u $USER -p$HASLO -h $HOST -se "select I_VALUE from INI where I_IDENT='AptestSmson' and I_OPERATOR=0";)
if [ -z "$SMSON" ]; then SMSON=0
fi

LCK=/var/lock/LCK_aptest_$HOST"_"$BAZA

if [ -e $LCK ]; then
MOD_DATE=`stat --format=%Y ${LCK}`
TODAY=`date +%s`
DIFF=$(((TODAY-MOD_DATE)/60))
if [ $DIFF -gt 4 ]
then
echo "Usuwam stary plik lock $LCK"
rm -v ${LCK}
fi
fi
lockfile -r 0 $LCK || exit 1

NOSCRN=echo

NADAWCA=$(mysql $BAZA -u $USER -p$HASLO -h $HOST -se "select I_VALUE from INI where I_IDENT='SMSNadawca' and I_OPERATOR=0";)
NADAWCA=" Nadawca: "$NADAWCA HASLOSMS=$(mysql $BAZA -u $USER -p$HASLO -h $HOST -se "select I_VALUE from INI where I_IDENT='SMSHaslo' and I_OPERATOR=0";)
SUBDOMENA=$(mysql $BAZA -u $USER -p$HASLO -h $HOST -se "select I_VALUE from INI where I_IDENT='SMSSubdomena' and I_OPERATOR=0";)
DOMENA=$(mysql $BAZA -u $USER -p$HASLO -h $HOST -se "select I_VALUE from INI where I_IDENT='SMSDomena' and I_OPERATOR=0";)
PATH1=/tmp/pyxis4sql.tmp
PLIKNAZWA=/SMS_$HOST"_"$BAZA"_"$$
PLIKNAZWA2=/EML_$HOST"_"$BAZA"_"$$
PLIK=$PATH1$PLIKNAZWA
PLIK2=$PATH1$PLIKNAZWA2

mkdir -p $PATH1

PARAM1=$1
if [ -z $1 ]; then PARAM1="0"
fi

mysql $BAZA -u $USER -p$HASLO -h $HOST -se \
"select vInf.INF_INDEX, vInf.INF_IP, replace(vInf.INF_NAZWA, ' ', '_'), vInf.INF_MONITORINGPOWIADOMUP, \
 coalesce(replace(vInf.INF_Wezel, ' ', '_'), '---'), coalesce(Inf.INF_IP, ''), vInf.INF_MONITORINGSMS, \
 vInf.INF_NAZWA, vInf.INF_FUNKCJA \
 from vInfrastruktura as vInf left join Infrastruktura as Inf on Inf.INF_INDEX=vInf.INF_MIEJSCEPODLACZENIA \
 where vInf.INF_DODAJDOMONITORINGU=1 and vInf.INF_CZYZAWIESZONE=0 order by vInf.INF_IP;" \
| while read INF_INDEX INF_IP INF_NAZWA INF_MONITORINGPOWIADOMUP INF_Wezel LOCAL WYSLIJSMS NAZWAORG FUNKCJA; do

if [ -z $LOCAL -o $LOCAL=0 ]; then LOCAL=$LOCAL2
fi

if [  $PARENT = 0 ]; then LOCAL=$LOCAL2
fi

if [ -z "$WYSLIJSMS" ]; then WYSLIJSMS=0
fi


NAME="$INF_NAZWA   wezel:  $INF_Wezel"
if [ $SMSON = 1 -a $WYSLIJSMS = 1 ]; then  NAME="$NAME  (+SMS)"
fi
NAMESMS="$INF_NAZWA wezel: $INF_Wezel"

HOST1=$INF_IP
RESPONSE_BACK=$INF_MONITORINGPOWIADOMUP
SW_PATH1=/tmp/pyxis4sql.tmp/tmp_$HOST"_"$BAZA"_"$INF_INDEX
MAXRESET=1
RESETCNT=0

mkdir -p $SW_PATH1

if [ $PARAM1 = "-p" ]; then  echo Start ping $HOST1 "(local" $LOCAL")"
fi

DATA=`date '+%x %X'`

ping -q -s $SIZE -i $WAIT -c $COUNT -W 3 -w 0.5 $HOST1 > $SW_PATH1/-1

ZERO1=`grep '100%' $SW_PATH1/-1`

if [ -z "$ZERO1" ]; then
if [ -f $SW_PATH1/-back ]; then
if [ $RESPONSE_BACK -gt 0 ]; then 
echo "Data: $DATA" > $PLIK2
echo "Nazwa urzadzenia: $INF_NAZWA" >> $PLIK2
echo "Funkcja: $FUNKCJA" >> $PLIK2
echo "Adres IP: $INF_IP" >> $PLIK2
echo "Status: Up (powrot)" >> $PLIK2
echo "IP kontrolne: $LOCAL" >> $PLIK2
echo "---" >> $PLIK2
echo "Host: $HOST" >> $PLIK2
echo "Baza: $BAZA" >> $PLIK2
mysql $BAZA -u $USER -p$HASLO -h $HOST -se "select I_VALUE from INI where I_OPERATOR=0 and I_IDENT like 'AptestEmail%' and I_VALUE<>''" \
| while read EMAIL; do
mutt -s "APTEST  ON -  $NAME  - $DATA"  $EMAIL < $PLIK2
mysql $BAZA -u $USER -p$HASLO -h $HOST -se "insert into Log set LOG_OPERATOR=0, LOG_OPERATORUPRAWNIENIA=0, LOG_DATA=NOW(), LOG_OPIS='$EMAIL  APTEST  ON -  $NAME   -  $DATA';"
rm -f $PLIK2
done
if [ $SMSON = 1 -a $WYSLIJSMS = 1 ]; then
echo $NADAWCA > $PLIK
echo $HASLOSMS >> $PLIK
echo "---" >> $PLIK
echo "APTEST ON - $NAMESMS - $DATA" >> $PLIK
echo "END" >> $PLIK
echo "SENDER: PYXIS" >> $PLIK
mysql $BAZA -u $USER -p$HASLO -h $HOST -se "select I_VALUE from INI where I_OPERATOR=0 and I_IDENT like 'AptestGsm%' and I_VALUE<>''" \
| while read TEL; do
mutt -s "SMS APTEST ON -  $NAME   -  $DATA"  $TEL"@"$SUBDOMENA"."$DOMENA < $PLIK
mysql $BAZA -u $USER -p$HASLO -h $HOST -se "insert into Log set LOG_OPERATOR=0, LOG_OPERATORUPRAWNIENIA=0, LOG_DATA=NOW(), LOG_OPIS='$TEL  SMS APTEST  ON -  $NAME   -  $DATA';"
done

rm -f $PLIK
fi
fi

rm $SW_PATH1/-back
fi
fi


if [ -z "$ZERO1"  ]; then
  if [ -z "$ZERO1" ]; then
  echo -n "."
  if [ $PARAM1 = "-p" ]; then $NOSCRN Host $HOST1 is responding for ping
  fi
 else
  echo -n "_"
  if [ $PARAM1 = "-p" ]; then $NOSCRN Host $HOST1 is not responding for ping!
  fi
 fi
 
RESETCNT=0
echo "RESETCNT=$RESETCNT"  > $SW_PATH1/-0
else

ping -q -s $SIZE -i $WAIT -c $COUNT -W 1 -w 0.4 $LOCAL > $SW_PATH1/-9
ZERO9=`grep '100%' $SW_PATH1/-9`

if [ -z "$ZERO9" ]; then
eval `cat $SW_PATH1/-0`
if [ -z "$RESETCNT" ]; then
RESETCNT=0
fi

if [ $RESETCNT -lt $MAXRESET ]; then
RESETCNT=$((RESETCNT+1))
echo "RESETCNT=$RESETCNT"  > $SW_PATH1/-0
echo -n "_"

if [ $PARAM1 = "-p" ]; then  echo ping $HOST1  $ZERO1
fi
if [ $PARAM1 = "-p" ]; then  echo Host not responding for ping!
fi

DATA=`date '+%x %X'`

############################# Wysylanie maila z informacja ##############################

echo "Data: $DATA" > $PLIK2
echo "Nazwa urzadzenia: $INF_NAZWA" >> $PLIK2
echo "Funkcja: $FUNKCJA" >> $PLIK2
echo "Adres IP: $INF_IP" >> $PLIK2
echo "Status: Down" >> $PLIK2
echo "IP kontrolne: $LOCAL" >> $PLIK2
echo "---" >> $PLIK2
echo "Host: $HOST" >> $PLIK2
echo "Baza: $BAZA" >> $PLIK2
mysql $BAZA -u $USER -p$HASLO -h $HOST -se "select I_VALUE from INI where I_OPERATOR=0 and I_IDENT like 'AptestEmail%' and I_VALUE<>''" \
| while read EMAIL; do
if [ $RESPONSE_BACK -gt 0 ]; then mutt -s "APTEST OFF -  $NAME  -  $DATA"  $EMAIL < $PLIK2
else mutt -s "APTEST OFF -  $NAME $WEZEL"  $EMAIL < $PLIK2
fi
mysql $BAZA -u $USER -p$HASLO -h $HOST -se "insert into Log set LOG_OPERATOR=0, LOG_OPERATORUPRAWNIENIA=0, LOG_DATA=NOW(), LOG_OPIS='$EMAIL  APTEST OFF  -  $NAME   -  $DATA';"
rm -f $PLIK2
done


if [ $SMSON = 1 -a $WYSLIJSMS = 1 ]; then
echo $NADAWCA > $PLIK
echo $HASLOSMS >> $PLIK
echo "---" >> $PLIK
echo "APTEST OFF - $NAMESMS - $DATA" >> $PLIK
echo "END" >> $PLIK
echo "SENDER: PYXIS" >> $PLIK
mysql $BAZA -u $USER -p$HASLO -h $HOST -se "select I_VALUE from INI where I_OPERATOR=0 and I_IDENT like 'AptestGsm%' and I_VALUE<>''" \
| while read TEL; do
mutt -s "SMS APTEST OFF -  $NAME   -  $DATA"  $TEL"@"$SUBDOMENA"."$DOMENA < $PLIK
mysql $BAZA -u $USER -p$HASLO -h $HOST -se "insert into Log set LOG_OPERATOR=0, LOG_OPERATORUPRAWNIENIA=0, LOG_DATA=NOW(), LOG_OPIS='$TEL  SMS APTEST OFF -  $NAME   -  $DATA';"
done

rm -f $PLIK
fi

echo $DATA > $SW_PATH1/-back

else
$NOSCREEN
fi
else
$NOSCREEN
fi
fi

if [ $PARAM1 = "-p" ]; then echo " "
fi

done

rm -f $LCK
mysql $BAZA -u $USER -p$HASLO -h $HOST -se "delete from INI where I_FILENAME='app' and I_OPERATOR=0 and I_SECTION='Var' and I_IDENT='aptestmysql_time';"
KONIEC=`date +%s`
RUNTIME=$(((KONIEC-START)/1))
mysql $BAZA -u $USER -p$HASLO -h $HOST -se "insert into INI set I_FILENAME='app', I_OPERATOR=0, I_SECTION='Var', I_IDENT='aptestmysql_time', I_VALUE=concat(NOW(), '  (', $RUNTIME, ' s)');"
echo -n "OK"
echo " "
#.

Piotr Szkut - PYXIS

Wróć do Pyxis5 SQL FAQ

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 4 gości

cron