Ihre Anfrage wird bearbeitet.

Bitte warten Sie einen Augenblick ...

 
Hosted with Microsoft Windows 2000 Server on IBM xServer
Formathelper

 Überwachungs-Tool fuer Ihre Dienste

Auch wenn gelegentliche Ausfälle von Diensten zu verschmerzen sind, möchte man darüber informiert werden.

Da ich bisher kein Tool zur Überwachung meiner Servers gefunden habe, habe ich mal Perl misshandelt.
Herrausgekommen ist meine WebWatch-Applikation

# perl -w
############################################################################
#
# Watchdog Agent
# 
# (c) 2011 Andreas Krüger
# Homepage : http://www.andreas-krueger.de/
# Mail     : http://www.andreas-krueger.de/system/kontakt/
#
############################################################################
my $Version = "2.11";
#
# 2.11 - 2011.02.27 - add last status
# 2.10 - 2011.02.24 - minor futures and fixes 
# 2.00 - 2011.02.16 - Initialversion 
#
############################################################################
#
############################################################################
# Benutze folgende Module
############################################################################
use LWP;
use MIME::Lite;
use Config::IniFiles;
use strict;
use warnings;
#
############################################################################
# Globale Konfigutaion in INI lesen
############################################################################
if (! -e "./WebWatch.ini" ){&MissingConfig;exit;}
my $cfg = Config::IniFiles->new( -file => "./WebWatch.ini" );
my $alive;
my $i;
my $ret;
############################################################################

if (lc($cfg->val( 'Application', 'Silent' ))eq "false"){&ShowInfo();}
for($i = 1; $i <= $cfg->val( 'Server', 'Anzahl' ); $i++) {
	$alive = TesteDienst(lc($cfg->val( 'Server'.$i, 'TesteURI' )), $cfg->val( 'Server'.$i, 'TesteAuf' ), $i);

	if ($alive eq "StatusTrue"){
		$cfg->newval('Server'.$i, "Alive", "true");
		$cfg->newval('Server'.$i, "Timestamp", &myTimer(0));
		$cfg->WriteConfig('./WebWatch.ini'=>1);
	}
	else{
		$cfg->newval('Server'.$i, "Alive", "false");
		$cfg->newval('Server'.$i, "Timestamp", &myTimer(0));
		$cfg->WriteConfig('./WebWatch.ini'=>1);
	}

	if (lc($cfg->val( 'Application', 'Silent' ))eq "false"){
		print $cfg->val( 'Server'.$i, 'Label' )." - ".$cfg->val( 'Server'.$i, $alive )."\n";
	}
}

############################################################################
############################################################################
# Subfunktionen
#
############################################################################
# Logfile schreiben
sub WriteLog
{
	my $Service = shift;
	my $Status = shift;
	my $Logfile = $cfg->val( 'Application', 'LogFolder' ).&myTimer(2)."-".$cfg->val( 'Application', 'Titel' ).".log";
	open(FILE_LOG, ">>$Logfile") || die "can't open: $!";
		print FILE_LOG &myTimer(1)." - WatchDog: ".$cfg->val( 'Server'.$Service, $Status )."\n";
	close (FILE_LOG);
}
############################################################################
# Fehlermail versenden
sub SendAlert
{
	my $Service = shift;
	MIME::Lite->send ("smtp", lc($cfg->val( 'Application', 'Mailserver' )));
		my $msg = MIME::Lite->new
		(
	  		From    => lc($cfg->val( 'Application', 'MailFrom' )),
	  		To      => lc($cfg->val( 'Server'.$Service, 'Kontakt' )),
	  		Subject => "SMSInfo zu ".$cfg->val( 'Server'.$Service, 'Label' ),
	  		Data    => "SMSInfo : ".$cfg->val( 'Server'.$Service, 'StatusFail' )." ".&myTimer(3)."\n",
		);
		$msg->send ();
}
############################################################################
# Recovermail versenden
sub SendReturn
{
	my $Service = shift;
	MIME::Lite->send ("smtp", lc($cfg->val( 'Application', 'Mailserver' )));
		my $msg = MIME::Lite->new
		(
	  		From    => lc($cfg->val( 'Application', 'MailFrom' )),
	  		To      => lc($cfg->val( 'Server'.$Service, 'Kontakt' )),
	  		Subject => "SMSInfo zu ".$cfg->val( 'Server'.$Service, 'Label' ),
	  		Data    => "SMSInfo : ".$cfg->val( 'Server'.$Service, 'StatusTrue' )." ".&myTimer(3)."\n",
		);
		$msg->send ();
}
############################################################################
# Teste den Webdienst
sub TesteDienst 
{
	my $uri = shift;
	my $answer = shift;
	my $Service = shift;
	my $browser = LWP::UserAgent->new;
	my @browser_headers = (
	   'User-Agent' => 'WebBot/1.2 (compatible; Watchdog-Service, $Version)',
	   'Accept' => 'text/plain, */*',
	   'Accept-Charset' => 'iso-8859-1,*,utf-8',
	   'Accept-Language' => 'de-DE',
	   );
	my $response = $browser->get($uri, @browser_headers);
	if ($response->content =~ /$answer/)
	{
		if($cfg->val( 'Application', 'DoMail' ) eq "true"){
			if($cfg->val( 'Server'.$Service, 'Alive' ) eq "false"){&SendReturn($Service)};
		};
		if($cfg->val( 'Application', 'DoLog' ) eq "true"){&WriteLog($Service,"StatusTrue")};
		return "StatusTrue"
	}
	else 
	{
		if($cfg->val( 'Application', 'DoMail' ) eq "true"){
			if($cfg->val( 'Server'.$Service, 'Alive' ) eq "true"){&SendAlert($Service)};
		};
		if($cfg->val( 'Application', 'DoLog' ) eq "true"){&WriteLog($Service,"StatusFail")};
		return "StatusFail";
	}
}
############################################################################
# Erstelle Zeitstempel für das Log
sub myTimer
{
	my $Format = shift;
	my ($sekunden, $minuten, $stunden, $monatstag, $monat, $jahr, $wochentag, $jahrestag, $sommerzeit) = localtime(time);
	$jahr = $jahr + 1900;
	$monat+=1;
	$jahrestag+=1;
	$monat = $monat < 10 ? $monat = "0".$monat : $monat;
	$monatstag = $monatstag < 10 ? $monatstag = "0".$monatstag : $monatstag;
	$stunden = $stunden < 10 ? $stunden = "0".$stunden : $stunden;
	$minuten = $minuten < 10 ? $minuten = "0".$minuten : $minuten;
	$sekunden = $sekunden < 10 ? $sekunden = "0".$sekunden : $sekunden;
	if ($Format == 3){return "$monatstag.$monat.$jahr $stunden:$minuten:$sekunden";}
	if ($Format == 2){return "$jahr$monat$monatstag";}
	if ($Format == 1){return "$jahr.$monat.$monatstag $stunden:$minuten:$sekunden";}
	if ($Format == 0){return "$jahr$monat$monatstag$stunden$minuten$sekunden";}
	else {return "$monatstag.$monat.$jahr $stunden:$minuten:$sekunden";}
}
############################################################################
# Zeige Startinfo
sub ShowInfo
{
	print "\n";
	print "  *** Running *************************************************************** \n";
	print "  *                                                                         *  \n";
	print "  *              WatchDog v$Version                                             *  \n";
	print "  *                                                                         *  \n";
	print "  *              ".&myTimer(3)."                                        *  \n";
	print "  *                                                                         *  \n";
	print "  ***************************************************************************  \n";
	print "\n";
}
sub MissingConfig
{
	print "Missing Config-File, generate Template and open it ... !!\n";
	open(FILE_CFG, ">>./WebWatch.ini") || die "can't open: $!";
		print FILE_CFG <<"EOM" ;
[Application]
Titel=Watchdog
Admin=Max Mustermann

# Silent true/false -> Ausgabe auf Console
Silent=false

# DoMail true/false -> Benachrichtigung per Mail
DoMail=false

# smtp Gateway
Mailserver=mail.server.home

# Absender der Mail 
MailFrom=watchdog\@mail.server.home

# DoLog true/false -> Logfile schreiben
DoLog=false

# LogFolder [Pfad] -> Pfad für Logfile
LogFolder=C:/Meine/Logs/

[Server]
# Anzahl der Serverabschnitte 
Anzahl=1

[Server1]
Label=IIS Home

# zu Testende URL (HTTP, FTP, ...)
TesteURI=http://www.server.home/watchdog.php

# String den der zu testende Dienst zurück gibt
TesteAuf=is alive

# Antworttexte
StatusTrue=WWW- und Script-Service sind erreichbar.
StatusFail=WWW- und Script-Service nicht erreichbar !

# Mailempfänger wenn Versand aktiv
Kontakt=anwender\@mail.server.home

EOM
	close (FILE_CFG);
	system("notepad.exe ./WebWatch.ini");
	exit;
}

Der Aufruf kann von der Komandozeile oder per Sheduler erfolgen.

Die INI ist wie folgt aufgebaut :

[Application]
Titel=Watchdog
Admin=Max Mustermann

# Ausgabe auf Console : true/false
Silent=false

# Benachrichtigung per Mail : true/false
DoMail=false

# smtp Gateway
Mailserver=mail.server.home

# Absenderadresse der Mail 
MailFrom=watchdog\@mail.server.home

# Logfile schreiben : true/false
DoLog=false

# Pfad für Logfile [Pfad]
LogFolder=C:/Meine/Logs/

[Server]
# Anzahl der Serverabschnitte 
Anzahl=1

[Server1]
Label=IIS Home

# zu Testende URL (HTTP, FTP, ...)
TesteURI=http://www.server.home/watchdog.php

# String den der zu testende Dienst zurück gibt
TesteAuf=is alive

# Antworttexte
StatusTrue=WWW- und Script-Service sind erreichbar.
StatusFail=WWW- und Script-Service nicht erreichbar !

# Mailempfänger wenn Versand aktiv
Kontakt=anwender@mail.server.home

Es sind beliebig viele Server-Abschnitte möglich.

Textfile Textfile
ZIP-Archiv Perl-File
ZIP-Archiv Win32-Exe

Stand : 01/03/2011



Anzeige

© 1998 - 2017 by Andreas Krüger
Zu Favoriten hinzufügen. | Als Startseite festlegen.
Scriptlaufzeit : 4,87 ms. | 81 Nutzer Online