Моніторинг мережі своїми руками
Продовження цього запису.
Зробив так, щоб якщо хост відвалився, то сповіщення прийшло тільки один раз, а потім ще раз, коли хост підніметься.
#!/usr/bin/env bash runfolder="/var/run/check_network" lockfile="$runfolder/lock" mkdir -p "$runfolder" function host_is_alive() { if [[ -f "$runfolder/dead_$1;$2" ]] then /usr/local/bin/jabber.php "admin@example.com" "ALERT: host $1 ($2) is alive" rm "$runfolder/dead_$1;$2" else true fi } function host_is_dead() { if [[ -f "$runfolder/dead_$1;$2" ]] then true else /usr/local/bin/jabber.php "admin@example.com" "ALERT: host $1 ($2) is dead" touch "$runfolder/dead_$1;$2" fi } function checkhost() { case "$3" in 0) host_is_alive "$1" "$2" ;; *) host_is_dead "$1" "$2" ;; esac } hosts="\ host-1;192.168.0.2;noskip \ host-2;192.168.0.3;skip \ host-3;192.168.0.4;noskip" if [[ -f "$lockfile" ]] then echo "Lockfile $lockfile exists" exit 1 fi touch "$lockfile" for host in $hosts do hostname=`echo $host | cut -d ';' -f 1` hostip=`echo $host | cut -d ';' -f 2` hostskip=`echo $host | cut -d ';' -f 3` if [[ "$hostskip" == "noskip" ]] then ping -c 1 -q -W 1 $hostip >/dev/null 2>&1 checkhost "$hostname" "$hostip" "$?" fi done rm -f "$lockfile"
Ну і PHP-скрипт для сповіщення по жабберу:
#!/usr/bin/php -q <?php include 'XMPPHP/XMPP.php'; error_reporting(0); $jid = $argv[1]; $message = $argv[2]; $conn = new XMPPHP_XMPP('xmpp.example.com', 5222, 'guardian', 'password', 'resource', 'example.com', $printlog=false, $loglevel=XMPPHP_Log::LEVEL_VERBOSE); try { $conn->connect(); $conn->processUntil('session_start'); $conn->presence(); $conn->message($jid, $message); $conn->disconnect(); } catch(XMPPHP_Exception $e) { die($e->getMessage()); } ?>
Для роботи потрібна оця бібліотека.
Залишити відповідь