Zabbix External Checks Beispiele

Webserver prüfen

Ein offener Port 80 ist noch kein Webserver

In der Liste der Simple Checks gibt es einen Check "http", doch prüft dieser nicht, ob auf einem Host wirklich ein Webserver antwortet. Wenn Sie den Check "http" auf den Port 22 anwenden, auf dem ein SSHD lauscht und antwortet, wird der HTTP-Check einen Erfolg vermelden. Der Check prüft nur, ob ein TCP-Port offen ist, aber nicht, welches Protokoll auf diesem Port antwortet.

External Check mit Curl

Unter Linux existieren zahlreichen Kommdozeilenwerkzeuge zum Prüfen einer HTTP-Verbindung, eines davon ist Curl, welches Zabbix auch für das Webmonitoring verwendet.

Legen Sie im Verzeichnis für externe Skripte folgende Skript an.

#!/bin/sh

# Check, if on a given adress a real webserver is listening
# HTTP Status Code can also be checked

URL="http://"$1

# Set the port (optional)
if [ $2 ]
then
        URL=$URL":"$2
fi
curl --silent --head $URL|head -n1|grep -c "HTTP"

Machen Sie das Skript ausführbar und testen Sie es.

./http.headercheck 127.0.0.1
1

Auf dem Zabbix-Server sollte auf Port 80 ein Webserver antworten und das Skript sollte eine "1" als Erfolgsmeldung zurückliefern. Testen Sie nun, ob auf Port 22 ein Webserver lauscht.

./http.headercheck 127.0.0.1 22
0

External Check als Item einrichten

Richten Sie nun für einen Host oder ein Template ein Item vom Typ "External Check" ein. Als Key geben Sie dann

http.headercheck[<port>]

an. Die Angabe des Ports ist optional, Port 80 wird als Standard verwendet. Curl external check.png

Mailserver prüfen

Perlscript zum Testen

Perl bringt mit dem Perlmodul Net::SMTP alles mit, und mit wenigen Zeilen Code einen SMTP-Dialog zu testen.Net::SMTP ist in allen Distributionen in der Grundausstattung von Perl bereits enthalten.

Kopieren Sie folgendes Script als smpt.check.pl in den Ordner, welchen Sie für die externen Skripte eingerichtet haben.

#!/usr/bin/perl

use warnings;
use Net::SMTP;
sub controll;
close STDERR;
open(STDERR, '>',\$debug_out);

# Connect to the mailserver
$smtp = Net::SMTP->new($ARGV[0],Debug=>1,Timeout=>20) or ( print 'CONNECTION FAILED' );
controll();
# Try if mailserver would accept a mail FROM a given address
# if second paramter is a FROM mailadress
if( $ARGV[1] =~ /@.*\.[a-z]/)
{
	$smtp->mail($ARGV[1]);
	controll();
	# Try if mailserver would accept a mail FOR a given address
	# if third paramter is a TO mailadress
	if( $ARGV[2] =~ /@.*\.[a-z]/)
	{
		$smtp->to($ARGV[2]);
		controll();
	}
}
$smtp->quit();
print $result."\n";
sub controll
{
	if( $smtp->ok() == 1 )
	{
		$result = "OK";
	}
	else
	{
		$debug_out = ((split /\n/  , $debug_out)[-1]);
		$debug_out = ((split /<<< /, $debug_out)[-1]);
		print $debug_out."\n";
		exit;
	}
}

Das Script liefert Ihnen "OK" zurück, wenn keine Fehler im SMTP-Dialog aufgetreten sind. Im Fehlerfalle wird die Fehlermeldung des Mailservers durchgereicht.

Sie können das Script mit folgenden Optionen verwenden:

  • Prüfen, ob Mailserver lauscht
smtp.check.pl mx01.test.com
  • Prüfen, ob Mailserver lauscht und Mails von einem Absender akzeptiert
smtp.check.pl mx01.test.com sender@meinedomain.de
  • Prüfen, ob Mailserver lauscht und Mails von einem Absender für einen Empfänger akzeptiert
smtp.check.pl mx01.test.com sender@meinedomain.de empfaenger@test.com

Item anlegen

Legen Sie nun für einen Host oder ein Template ein Item an.

Item smtp check.png

Trigger anlegen

Ein passender Trigger könnte so eingerichtet werden.

Trigger smtp check.png