Zabbix:Template Windows Service Auto-Discover Zabbix 3.x - Windows Dienste Service Discovery mit Bordmitteln
Aus znilwiki
Seit Version 3.x ist Zabbix direkt über den Windows-Agenten in der Lage, Windows Dienste per Discovery zu finden.
Nachfolgend die Anleitung wie man das umsetzt - inklusive Filter für Dienste die nicht mit Überwacht werden sollen.
Voraussetzungen
- Zabbix Agent 3.x oder höher auf den zu überwachenden Windows-Hosts
- Zabbix Server Version 3.x oder höher
Filter
Der Discovery-Prozess wird uns alle Dienste vom Starttyp
- Automatisch
- Automatisch (Verzögerter Start)
liefern. Trotzdem sind da immer wieder Dienste dabei die wir gar nicht überwachen wollen.
In meiner bisherigen Lösung hatte ich deshalb eine Text-Datei genutzt in welcher die Namen von Diensten die Ignoriert werden sollen eingetragen werden konnten.
In Zabbix führen wir diese Liste nun als Regular Expression
Wie bisher bauen wir das so, das wir wahlweise
- den Dienstnamen, z.B. "Spooler"
- Den Anzeigenamen, z.B. "Druckwarteschlange"
in diese Liste eintragen können.
Wir gehen zu
Administration => General => Regular expressions
und erstellen eine "New regular expression"
Name: Windows_Services_to_ignore
Und in diese tragen wir für jeden Dienst der Ignoriert werden soll eine Zeile ein:
Da wird ein "Text in Text" vergleich genutzt! Solltet Ihr den Buchstaben "e" dort eintragen so werden alle Dienste die ein "e" enthalten ignoriert!
Wenn ihr das Zeichen ^
davor setzt so muss das Wort am Anfang stehen. Es gelten alle RegEx-Regeln für POSIX-Systeme
Template
Discovery rule
Wir erstellen ein neues Template, meines nenne ich
znil Template native Windows Service Discovery Zabbix 3.x
Im Bereich "Discovery rules" erstellen wir eine neue Rule mit dem folgenden Eigenschaften
Name ...........: Discover Windows Service Type ...........: Zabbix Agent (active) Key ............: service.discovery Update intervall: 3600 Keep lost period: 1
Dann wechselt oben auf Filters:
mit den folgenden Einstellungen:
A {#SERVICE.STARTUP} 1 B {#SERVICE.STARTUP} 0 C {#SERVICE.NAME} @Windows_Services_to_ignore D {#SERVICE.DISPLAYNAME} @Windows_Services_to_ignore
oben unbedingt bei "Type of calculation" auf "Custom expression" wechseln:
(A or B) and C and D
Erklärung:
- Der Dienst muss vom Starttyp 1 ODER 0 sein (Automatischer Start & Automatischer Start verzögert)
- UND der Dienstname muss unserem Regular Expression entsprechen
- UND Dienst-Anzeigename muss unserem Regular Expression entsprechen
Item prototype
Wir erstellen einen neuen Item-Protypen:
Name ..............: Service - {#SERVICE.DISPLAYNAME} - State Type ..............: Zabbix agent (active) Key ...............: service.info[{#SERVICE.NAME}] Type of information: Numeric (unsigned) Data type .........: Decimal Update interval ...: 120 Show value ........: Windows service state
Trigger
Und noch den passenden Trigger-Prototypen:
Name .....: Service {#SERVICE.DISPLAYNAME} is not running Expression: {znil Template native Windows Service Discovery Zabbix 3.x:service.info[{#SERVICE.NAME}].last()}<>0 and {znil Template native Windows Service Discovery Zabbix 3.x:service.info[{#SERVICE.NAME}].last()}<>255 Severity .: Warning
Bei der Expression testen wir ob der Zustand NICHT 0 (= läuft) und NICHT 255 ist.
255 steht für "Dienst nicht vorhanden" - Falls der Dienst deinstalliert wird, wird so kein Alarm ausgelöst.
Download
Hier das Template als Download.
Die Regular expression müsst Ihr aber auf jeden Fall von Hand anlegen!
Znil_Template_native_Windows_Service_Discovery_Zabbix_3.x.xml.zip
Migration vom bisherigen Template
Vorher hatte ich ja immer mein eigenes Programm dafür eingesetzt (servdisc.exe) da Zabbix bis 3.x das noch nicht konnte.
Um von der alten Version auf diese neue zu migrieren gibt es 2 Möglichkeiten:
- Ihr erstellte dieses neue Template, löscht das alte bei den Hosts und fügt stattdessen dieses hinzu. Ggf. die zugewiesenen Templates bei der Auto-Registration nicht vergessen
- Ihr baut das schon vorhandene Template auf dieses um. Achtung: Viele Schlüsselwörter sehen ähnlich aus, haben aber andere Schreibweise! Also alles mit Copy&Paste anpassen
- In diesem Fall wird er alle Dienste neu erkennen und die alten löschen!
- Setzt vorher Keep lost resources period (in days) auf 0 - so löscht er die alten Dienste sofort - und kann die neuen auch wieder sofort anlegen
- Eventuell setzt Ihr auch den Intervall runter - aber nicht vergessen den hinterher wieder hoch zu setzten.