Моніторинг мережі своїми руками

Продовження цього запису.

Зробив так, щоб якщо хост відвалився, то сповіщення прийшло тільки один раз, а потім ще раз, коли хост підніметься.

#!/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());
	}
?>

Для роботи потрібна оця бібліотека.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

*

Цей сайт використовує Akismet для зменшення спаму. Дізнайтеся, як обробляються ваші дані коментарів.