Zabbix Hostdiscovery und Autoregistration

Einleitung

Zabbix bietet zwei Funktionen, um Host automatisch ins Monitoring aufzunehmen. Hostdiscovery und Autoregistration. Mit beiden Funktionen können Sie Hosts automatisch in Zabbix hinzufügen, ohne dies über die Weboberfläche zu konfigurieren. Die Discovery Funktion bietet mehr Möglichkeiten als die Funktion Autoregistration. Dafür ist das Einrichten der Autoregistration mit wenigen Klicks erledigt.

Die Autoregistration wird vom Zabbix-Agenten angestoßen. Dieser Meldet sich beim Zabbix-Server mit der Anfrage, ins Monitoring aufgenommen zu werden. Entspricht der anfragende Host den festgesetzten Regeln für die Autoregistration, wird er aufgenommen. Je nach Regeln, werden Templates zugeordnet und der Host in eine Gruppe einsortiert. Hosts ohne Zabbix-Agent können keine Autoregistration durchführen.

Bei der Hostdiscovery scannt der Zabbix-Server ein Netzsegment ab. Entspricht ein gefundener Host einem Kriterium, wird dieser in Zabbix aufgenommen. Über Regeln legen Sie fest, in welche Gruppe ein gefundener Host einsortiert wird und welche Templates verwendet werden. Hosts, die Zabbix kennt, die bei Netzwerkscans aber nicht mehr gefunden werden, können automatisch aus Zabbix entfernt werden.

Autoregistration

Trapper aktivieren

Damit die Autoregistration funktioniert, muss der Zabbix-Server Trapperanfragen akzeptieren. Der Trapper-Prozess nimmt die Anfrage nach einer automatischen Registrierung entgegen, und leitet diese an eine Aktion weiter. Die Einstellungen des Zabbix-Servers müssen wie bei den Aktiven Agent Cheks vorgenommen werden. Es muss mindestens ein Trapper Prozess auf dem Zabbix-Server laufen. Der Host, der sich automatisch registriert, muss den Port 10051 des Zabbix-Servers erreichen. Wenn Sie die Default-Einstellungen verwenden, dann sind fünf Trapper aktiv, und Sie müssen keine Einstellungen ändern. Funktioniert die Autoregistration nicht, dann prüfen Sie folgende Einstellungen in der Datei zabbix_server.conf:

### Option: StartTrappers
#       Number of pre-forked instances of trappers.
#
# Mandatory: no
# Range: 0-1000
# Default:
StartTrappers=5

### Option: ListenPort
#       Listen port for trapper.
#
# Mandatory: no
# Range: 1024-32767
# Default:
ListenPort=10051

### Option: ListenIP
#       List of comma delimited IP addresses that the trapper should listen on.
#       Trapper will listen on all network interfaces if this parameter is missing.
#
# Mandatory: no
# Default:
ListenIP=0.0.0.0

Zabbix-Agent vorbereiten

Damit sich ein Zabbix-Agent selbstständig beim Zabbix-Server registrieren kann, müssen einige einige Anpassungen an der Konfiguration vorgenommen werden.

  • Über die Variable ServerActive geben Sie die IP des Zabbix-Servers an, an dem sich der Agent registrieren soll.
  • Über die Variable Hostname legen Sie fest, mit welchem Name der Host später in Zabbix geführt wird.
  • Alternativ können Sie HostnameItem=system.hostname angeben. Dann registriert sich der Agent mit seinem kurzen Hostnamen beim Zabbix-Server. Wenn der Agent sich mit seinem FQDN registrieren soll, können Sie dies mit HostnameItem=system.run["hostname -f"] erreichen. Dieser Trick erfordert aber auch, dass Sie EnableRemoteCommands=1 setzen.
  • Über die Einstellungen HostMetadata oder HostMetadataItem können Sie angeben welche zusätzlichen Daten der Agent während der automatischen Registrierung an den Server übergibt. Diese Daten wertet der Server mit Regeln aus und kann dann z.B. passenden Templates zuweisen. Mit HostMetadata='Text' weisen Sie einen beliebigen Text zu. Mit HostMetadataItem=system.uname werden die Metadaten mit dem Rückgabewert des Items "system.uname" dynamisch gefüllt. Sie können jedes Items verwenden, welches der Zabbix-Agent kennt.

Im folgenden Beispiel werden sowohl der Hostname als auch die Informationen über das Betriebssystem dynamisch gesetzt.

### Option: ServerActive
#       List of comma delimited IP:port (or hostname:port) pairs of Zabbix servers for active checks.
#       If port is not specified, default port is used.
#       IPv6 addresses must be enclosed in square brackets if port for that host is specified.
#       If port is not specified, square brackets for IPv6 addresses are optional.
#       If this parameter is not specified, active checks are disabled.
#       Example: ServerActive=127.0.0.1:20051,zabbix.domain,[::1]:30051,::1,[12fc::1]

ServerActive=192.168.152.7

### Option: HostnameItem
#       Item used for generating Hostname if it is undefined.
#       Ignored if Hostname is defined.

HostnameItem=system.hostname

### Option: HostMetadataItem
#       Optional parameter that defines an item used for getting host metadata.
#       Host metadata is used at host auto-registration process.
#       During an auto-registration request an agent will log a warning message if
#       the value returned by specified item is over limit of 255 characters.
#       This option is only used when HostMetadata is not defined.

HostMetadataItem=system.uname

Regeln festlegen

Die automatische Registrierung von Hosts ist standardmäßig deaktiviert. Zum aktivieren dieser Funktion wählen Sie über das Hauptmenü Configuration|Actions aus, und wählen oben rechts als Event Source "Auto registration" aus. Mit dem Button "Create Action" legen Sie eine neue Aktion für das automatische Hinzufügen von Hosts an.

Geben Sie der neuen Regel einen Namen, z.B. "Autoregistration". Wenn Sie über jeden neu hinzugefügten Host per Email informiert werden möchten, können Sie wie bei allen anderen Aktionen Betreff und Text mit Macros anpassen. (Siehe Macros im Kapitel [[1]])

Über den Reiter Conditions legen Sie fest, ob der sich registrierende Host bestimmte Voraussetzungen erfüllen muss. Sie können prüfen, ob der Hostname einem Muster entspricht, oder ob sich der Host über einen bestimmten Proxy registriert. Wenn Sie im Zabbix-Agent sogenannte Metdaten gesetzt haben (siehe oben) können Sie Aktionen in Abhängigkeit zu diesen Daten einrichten. So können Sie z.B. verschiedene Templates in Abhängigkeit zum verwendeten Betriebssystem zuweisen. Ist kein Hostname angeben, wird der Systemname verwendet. Wenn Sie keine Konditionen angeben, werden alle Hosts akzeptiert.

Über den Reiter Operations legen Sie anschließend fest, was bei einer automatischen Registrierung passieren soll. Über den Link "New" fügen Sie Aktionen hinzu, wie Sie es auch bei der Konfiguration von Alarmen getan haben. Mit der bekannten Aktionen "Send message" können Sie sich über den neuen Host per Email informieren lassen.

Mit der Aktion "Add host" wird der Host zu Zabbix hinzugefügt und in die Gruppe "discovered hosts" einsortiert. Alternativ können Sie den Host mit der Aktion "Add to host group" auch in eine beliebige Gruppe einsortieren.

Mit "Link to template" weisen Sie dem Host ein Template zu. Der Host wird dann sofort gemonitored. Wenn Sie das sofortige Monitoren verhindern wollen, fügen Sie zusätzlich die Aktion "disable host" hinzu. Sie sollten nur sehr allgemeine Templates automatisch hinzufügen, da der Prozess der Autoregistration keine weiteren Checks durchführt um z.B. gestartete Dienste zu erkennen.

Aktion zum automatischen Hinzufügen von Hosts, sobald der Zabbix-Agent sich meldet.

Sobald Sie die Regel für die Autoregistration gespeichert haben, nimmt der Zabbix-Server alle Hosts auf, die den Regeln entsprechen. Anhand des vom Agenten gesendeten Hostnamen wird entschieden, ob der Host bereits bekannt ist oder noch hinzugefügt werden muss.

Wenn Sie einen automatisch registrierten Host löschen, wird dieser sofort wieder hinzugefügt, solange der Zabbix-Agent auf den betroffenen System läuft.

Discovery

Neben der Funktion Autoregistration gibt es noch die Funktion Discovery, die ein ähnliches Ziel verfolgt. Hosts werden automatisch erkannt und zu Zabbix hinzugefügt. Im Gegensatz zur Autoregistration setzt die Discovery-Funktionen keinen Zabbix-Agenten voraus, der das Hinzufügen des Hosts auslöst.

Das automatische Finden von Host besteht streng genommen aus zwei Funktionen. Winem regelmäßigen Netzwerkscan (Discovery) und einer Aktion, die für gefunden Hosts angewendet wird.

Netz scannen

Bevor der Zabbix-Server ein Netzsegment scannen kann, müssen Sie sicher stellen, dass auch mindestens ein passender Serverprozess gestartet wurde. Die Standardeinstellungen starten einen Prozess zum scannen, was für den Anfang ausreichend ist. Öffnen Sie trotzdem sicherheitshalber die Datei zabbix_server.conf und prüfen Sie folgende Einstellung:

### Option: StartDiscoverers
#       Number of pre-forked instances of discoverers.
#
# Mandatory: no
# Range: 0-250
# Default:
# StartDiscoverers=1

Über das Hauptmenü Configuration|Discovery legen Sie mit dem Button "Create Rule" einen neuen Netzwerkscanner an.

Regel zum Scannen des Netzwerkes.

Geben Sie der Scanregel einen Namen, z.B. "Scan DMZ". Über diesen Namen identifizieren Sie später die Scanergebnisse. Es ist hilfreich, wenn aus dem Namen der Regel hervorgeht, welche Netzsegment gescannt wurde.

Soll das Netzsegment von einem Proxy gescannt werden, so wählen Sie diesen über das Dropdown-Menü "Discovery by proxy" aus. Auf dem Proxy muss auch in der Konfiguration StartDiscoverers=1 oder höher gesetzt sein.

In Feld IP range tragen Sie ein, was gesannt werden soll. Sie können die Range in folgenden Formaten eintragen:

  • Einzelne IP, z.B. 192.168.1.33
  • Bereich von IP Addressen, z.B. 192.168.1.1-255
  • Netz mit Netzmaske, z.B. 192.168.4.0/24
  • Liste, z.B. 192.168.1.1-255,192.168.2.1-100,192.168.2.200,192.168.4.0/24

Über das Delay legen Sie fest, in welchem zeitlichen Abstand die Scanns erfolgen sollen.

Sie müssen im Feld Checks mindestens einen Check angeben, über den Host gefunden werden sollen. Sie sind dabei nicht nur auf ICMP Pings beschränkt. Sie können auch gezielt nach Hosts suchen, die z.B. einen offenen Port 22 haben. So können Sie gezielte Discovery Regeln erstellen, die unterschiedliche Aktionen auslösen. Wenn Sie den Check TCP auswählen, können Sie Ports mit Komma oder Portranges mit Minuszeichen getrennt angeben. Zum Beispiel 22,80-100,3389
Ein Host gilt als gefunden (discovered), wenn mindestens ein Check erfolgreich war. Es ist ratsam schon während des Discovery-Vorgangs eine Reihe von Ports zu scannen, denn auf Checks des Discovery-Vorgangs wenden Sie später die Regeln an, welche z.B. passende Templates hinzufügen.

Wenn Sie als Check Zabbix-Agent hinzufügen, dann fragt der Zabbix-Server sofort nach dem Auffinden des Hosts den Agent ab. Alle Items, die Sie der Discovery Rule hinzufügen, können Sie später als Bedingung zum Ausführen von Aktionen nutzen. Wenn Sie z.B. das Item mysql.ping abfragen, können Sie bei einer erfolgreiche Verbindung der Datenbank, dem Host das Template mysql zuweisen.

Wenn Sie beim Auffinden der Hosts den Zabbix-Agenten nicht prüfen, dann wird nur anhand der IP-Adresse entschieden, ob der Host schon bekannt ist, oder nicht. Die Einstellung Device uniqueness criteria können Sie folglich nicht ändern.
Befindet sich hingegen mindestens ein Check vom Type Zabbix-Agent in der Liste der Checks, können Sie auch über den vom Zabbix-Agenten gelieferten Item Value entscheiden, ob der Host schon bekannt ist. Das Item system.hostname bietet sich an.

Wenn Sie eine neue Regel zum Scannen anlegen, sollten Sie diese Regel mit dem Schalter Status erst einmal deaktivieren. Legen Sie zuerst die passenden Aktion an, die die Ergebnisse des Scans verarbeitet. Das sofortige scannen des Netzwerkes ohne Aktionen bringt nicht viel.

Über Latest Data/Discovery kann man den Status des Netzwerscans beobachten.

Scanergebnisse verarbeiten

Sobald der Zabbix-Server per Netzwerkscan einen noch unbekannten Hosts gefunden hat, sucht der Discovery-Prozess nach passenden Aktionen für den neuen Host. Erst durch eine Aktion, werden gefunden Hosts als überwachte Hosts im Zabbix-Server angelegt. Der Zabbix-Server führt alle Aktionen aus, deren Bedingungen auf einen Host zutreffen. Sie können das Hinzufügen neuer Hosts auf mehrere Aktionen verteilen. So kann z.B. eine erste allgemeine Aktion den Host hinzufügen. Weitere Aktionen werten dann auf dem Host gefundene Dienste aus, und weisen passende Templates zu.

Klicken Sie im Hauptmenü auf Configuration|Actions und wählen Sie im Dropdown-Menü oben rechts "Discovery" als Event Source aus. Klicken Sie anschließend auf "Create Action". Sie erhalten das gewohnte Formular zum anlegen einer Aktion. Die Angabe eines Names für die Aktion ist Pflicht. Betreff und Nachricht müssen Sie nur angeben, wenn Sie für jeden gefundenen Host eine Nachricht verschicken wollen. Die Verwendung von Macros erfolgt wie bei allen Aktionen.

Im Reiter Conditions wählen über das Dropdown-Menü "New Condition" aus, welche Bedingungen der gefundene Host erfüllen soll. Folgende Kriterien stehen als Bedingungen zu Auswahl:

Host IP
Angabe von IPs oder Ranges. Format wie bei der Angabe der Ranges für die Discovery Regeln.
Service Type
Die Bedingung wird erfüllt, wenn der ausgewählte Service auf dem gefundenen Host zur Verfügung steht. Sie können z.B. eine generelle Discovery Regel anlegen, welche eine Reihe von Ports (Services) prüft. Dann legen Sie mehrere Aktionen an, die je nach gefundenem Service, passende Templates zuordnen. Sie können nur auf Services prüfen, die während des Netzwerkscans (Discovery Check) gesucht wurden.
Service Port
Wenn Sie als Service Type TCP auswählen, legen Sie über den Service Port fest, welche TCP-Ports geprüft werden sollen. Auch hier gilt: Es können nur Port geprüft werden, die der Discovery Prozess vorher gesucht hat.
Discovery Rule
Sie können eingrenzen, für welche Discovery Rule die Aktion gelten soll. Sie können z.B. pro Netzwerksegment eine Discovery Regel anlegen, die dann jeweils eigene Aktionen zum Verarbeiten der Resultate haben.
Discovery Check
Diese Bedingung wird erfüllt, wenn der ein spezieller Check einer Discovery Rule erfolgreich war.
Discovery Object
@Todo:was ist das?
Discovery Status
@Todo:was ist das?
Uptime/Downtime
@Todo:Beispiel
Received Value
Über diese Bedingung werden die Rückgabewerte (Item Values) vom Zabbix-Agenten mit einem Muster verglichen. Dieses Muster wird in allen Item Values gesucht, die von der Discovery Rule abgerufen wurden. Wenn das Muster auf eines der Item Values passt, gilt die Bedingung als erfüllt. Es ist nicht möglich einzelne Items Values gezielt in der Bedingung anzugeben.
Proxy
Sie können angeben, ob eine Aktion nur für Hosts ausgeführt wird, die über einen speziellen Proxy gefunden wurden.

Über den Reiter Operations stehen die selben Operationen wie bei der Autoregistration zur Verfügunug. Zusätzlich gibt es aber die Möglichkeit, Hosts aus Zabbix zu entfernen oder Templates von Host zu entfernen.

Aktionen für das Verarbeiten von Netzwerkscans (Discovery)