[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Nagios - UDP-Ports überwachen



Also alleine wie du deine Frage gestellt hast, ist denke ich nicht ganz
klar was es bedeutet einen UDP-Port zu "überwachen".

Aber eines ersteinmal vorweg. Nagios funktioniert so das es einfach nur
simple Programme aufruft. Diese Programme erledigen ihre aufgabe und
geben dann einfach eine Textzeile zurück die dann von Nagios ausgewertet
werden. Die ganzen Programme sind selber auch alle einzelnt aufrufbar.
Sie liegen bei Debian unter /usr/lib/nagios/plugins. Von daher wenn du
einen bestimmten Check prüfen möchtest kannst du jederzeit in dieses
Verzeichnis gehen und die Programme selber von hand aufrufen. Jedes
Programm sollte auch ein "--help" Argument haben das die die ganzen
Optionen erklärt.

Wenn du das mit check_udp machst bekommst du zum Beispiel (nur um einen
auschnitt auszugeben) das hier wieder.

> Usage:
> check_udp -H host -p port [-w <warning time>] [-c <critical time>] [-s <send string>]
> [-e <expect string>] [-q <quit string>][-m <maximum bytes>] [-d <delay>]
> [-t <timeout seconds>] [-r <refuse state>] [-M <mismatch state>] [-v] [-4|-6] [-j]
> [-D <days to cert expiry>] [-S <use SSL>] [-E]


Ansonsten wieder auf das Thema UDP zurück. Was ich hier kurz erwähnen
möchte ist TCP. TCP ist ein Verbindungsorientiertes Protokoll. UDP ist
allerdings ein Verbindungsloses Protokoll. Das ganze ist für dein Prüfen
ziemlich wichtig.

Einen TCP Port kannst du nämlich deswegen weil es Verbindungsorientiert
ist auch Prüfen. Es gibt einen Festen Handshake. Du sendest ein TCP
Paket zu deinem Ziel das das Flag SYN gesetzt hat. Der Server sendet ein
Paket mit den Flags SYN,ACK zurück und dann sendest der Client wieder
ein ACK Paket. Durch diesen Handshake dem den TCP-Protokoll zu grunde
liegt ist letztendlich jeder TCP-Port selber auch testbar. Weil du halt
eine Verbindung aufbauen kannst und es vom Server bestätigt wird.

UDP hat sowas aber gar nicht. Bei UDP sendest du ein Paket in das
Internet und das war es. Ob das Paket beim Server ankommt? Tja das weiß
niemand. Und weil der Server üblicherweise nichts zurücksenden muss,
kannst du auch nicht einfach so einen beliebigen UDP-Port "prüfen".

Also rein auf UDP Ebene kommst du nicht weit. Du musst höher auf die
Protokoll eben, nämlich die Daten die letztendlich gesendet und
empfangen werden. Sprich, wenn du Beispielsweise prüfen möchtest ob DNS
funktioniert, so musst du ein gültige DNS Anfrage generieren. Diese zum
Server senden, und dann musst du auf die Antwort warten, und wenn sie
kommt dann musst du auswerten ob sie korrekt ist. Kurz gesagt du musst
den Dienst testen der dahinter ist ob dieser korrekt arbeitet.

Das geht übrigens nur für Dienste die nach dem Schema Request/Response
verfahren. Auch das muss bei UDP nichtmal gegeben sein.

Und wenn du dir die Optionen von check_udp anschaust. Genau deswegen
gibt es dort die Schalter "-s <send string>" und "-e <expect string>".
Daher du musst check_udp den Inhalt eines UDP Packetes geben, und
ebenfalls angeben was du als Rückgabe erwartest.

check_udp ist aber ziemlich low-level. Daher du darfst dir dann an der
Stelle wirklich einmal anschauen wie das entsprechende Protokoll
überhaupt aufgebaut ist und was als Rückgabe zurück kommt. Entweder
liest du dazu die RFC oder du zeichnest mithilfe von wireshark oder
ähnliches packete auf damit du weißt was du senden musst und was als
Rückgabe zurück kommt.

Wichtig ist also das du ausschließlich auf höhere Ebene prüfen kannst.
Nämlich den Dienst der dahinter ist. Welcher Dienst das jetzt genau ist,
dass weißt ersteinmal nur du selber.

Wenn es natürlich ein bekannter Dienst ist könntest du bei den Nagios
Plugins nachschauen ob jemand schon so einen Check für deinen Dienst
geschrieben hat. Aber du sagtest ja das du es dir umständlich machen
möchtest und das lieber selber alles machen möchtest. ;)


Reply to: