Zabbix:Template Linux Process Discovery: Unterschied zwischen den Versionen
Aus znilwiki
BLinz2 (Diskussion | Beiträge) K (Textersetzung - „<comments>“ durch „<comments />“) |
(kein Unterschied)
|
Version vom 6. August 2017, 19:52 Uhr
Ein Template was ich fast immer auf Windows-Servern nutze ist dieses hier: Zabbix:Template Windows Service Auto-Discover - Windows Dienste automatisch entdecken
Unter Windows ist es im Server-Umfeld üblich das sich die Programme selbst als Dienst installieren,
zum Beispiel SQL Sever (egal ob Microsoft oder MySQL), Exchange, IIS oder auch der Virenscanner.
Das macht die Erfassung der zu überwachenden Dienste recht einfach, mein Tool schaut einfach nach welche Dienste in Windows registriert sind und auf "Automatischer Start" stehen.
Das sind die Dienste die in der Regel laufen sollten. Aus dieser Liste werden dann die Items gebaut - und bei denen wird Windows wieder direkt gefragt "Wie ist der Status des Dienstes XYZ?"
Linux ... nun ok, das gibt es schon einmal mehrere Stellen an denen man sich Orientieren könnte.
Die /etc/rcx.d/
Verzeichnisse ...
Oder bei Upstart unter /etc/init/
...
Oder bei systemd unter /lib/systemd/system/
... was über /etc/systemd/system/
überschrieben wird ...
Oder ganz klassisch auf /etc/init.d/
...
Jede menge Stellen also ...
Und je nach verwendeten System müsse die Frage ob der Dienst läuft anders laufen.
service apache2 status
liefert uns ein
* apache2 is running
während das Startskript des Zabbix-Agenten den Parameter gar nicht kennt:
service zabbix-agent status Usage: /etc/init.d/zabbix_agentd {start|stop|restart|force-reload}
Also alles doof (im Moment).
Statt eines Super-Skriptes das alle Eventualitäten abklopft und dann auch noch so kompatibel gebaut ist das es unter Debian, Ubuntu, SUSE und anderen funktioniert hatte ich nach einer einfacheren Lösung gesucht.
Bei einer Suche im Internet fand ich diese Lösung hier:
https://github.com/q1x/zabbix-templates/tree/master/process-discovery von Raymond Kuiper
Wie der Autor dort schon schreibt: !!! Highly experimental, use at your own risk !!!
So war es denn auch, die ersten Test's ohne Filter erzeugten viel zu viele Items, die Abfrage dieser war auch nur zum Teil möglich.
Elegant an seiner Lösung fand ich aber die Einzeiler als UserParamter.
Ich habe deshalb seine Arbeit als Vorlage genommen und nach meinen Bedürfnissen weiter entwickelt.
Vorschau
Einschränkungen
Das Template basiert darauf das per dem Befehl
/bin/ps --no-headers caux
eine Liste aller Prozesse ermittelt wird.
Diese wird dann pro Benutzer und Prozessname per LLD an den Zabbix-Server übermittelt, Dubletten werden unterdrückt.
Je nach System und Anzahl der Prozesse kann diese Liste also sehr lang werden ... eventuell zu lang. Dann funktioniert das Discovery nicht - und damit das ganze Template nicht.
Wenn es sehr viele Prozesse sind werden auch entsprechend viele Items gebaut - nämlich 4 Stück pro Prozessname und Benutzer.
Es können als sehr schnell ein paar hundert oder tausend Items entstehen - wenn man nicht aufpasst.
Auf den Systemen die ich hier zum Testen genommen habe passte dieses aber noch überall.
Ggf. deaktiviert Ihr einzelne Item prototypes bei der Discover Rule des Templates - am besten bevor Ihr das Template auf einen Host legt.
Der "Memory usage" Wert wird über die eingebaute Funktion des Zabbix-Agenten abgefragt - und gibt eher den Wert wieder den die Applikation angefragt hat, nicht die tatsächliche Nutzung. Ich kann mit dem Wert nicht soviel anfangen und habe deshalb den prozentualen Wert hinzugenommen.
Den "CPU usage" könnte man inzwischen (ab Zabbix Agent 3.0.x) auch über den Agenten statt des UserParameter abfragen. Ich habe aber viele Linux Server wo ich den Agenten aus den Quellen installiere - und dort ist oft noch Version 2.2 oder 2.4 im Einsatz. Deshalb dieser Weg der auch noch mit den älteren Agenten funktioniert.
Anpassung zabbix_agentd
Das Template basiert auf einer Erweiterung des Zabbix-Agenten auf den Linux Hosts per UserParameter:
nano /usr/local/etc/zabbix_agentd.conf nano /etc/zabbix/zabbix_agentd.conf
und am besten ganz an das Ende die folgenden Zeilen einfügen:
# DG_Template Linux Process Discovery
# Returns a list of monitorable processes in Zabbix LLD JSON format
UserParameter=dg.ps.discovery,echo "{ \"data\":[" ; /bin/ps --no-headers caux | /usr/bin/awk '{ print " { \"{#PSUSER}\":\"" $1 "\", \"{#PSNAME}\":\"" $11 "\" },"}' | /usr/bin/sort | /usr/bin/uniq | /bin/sed -e 's/\//\\\//g' -e '$s/.$//' ; echo " ]}"
# Calculates CPU usage in % over multiple process threads
UserParameter=dg.proc.cpu[*],TOTALCPU=0; for PROC in `/bin/ps u -C $1 | /bin/grep -e '^$2' | /usr/bin/awk '{ print $$3 }'`; do TOTALCPU=`echo "$TOTALCPU $PROC" | /usr/bin/awk '{print $$1 + $$2}'` ; done; echo $TOTALCPU
# Calculates CPU usage in % over multiple process threads
UserParameter=dg.proc.mem[*],TOTALMEM=0; for PROC in `/bin/ps u -C $1 | /bin/grep -e '^$2' | /usr/bin/awk '{ print $$4 }'`; do TOTALMEM=`echo "$TOTALMEM $PROC" | /usr/bin/awk '{print $$1 + $$2}'` ; done; echo $TOTALMEM
#
Damit der Agent das übernimmt müsst Ihr diesen neu starten:
service zabbix-agent restart /etc/init.d/zabbix-agent restart ...
Template DG_Template Linux Process Discovery
Das Template hier ist unter Zabbix 3.0.x erstellt worden.
Download: Zabbix-Template-Linux-Process-Discovery.zip
Nach dem Import findet Ihr das Template unter dem Namen
DG_Template Linux Process Discovery
in den Host-Gruppen
Templates Templates DATAGROUP Templates znil.net
Das Template findet nun nicht alle Prozesse sondern nur welche die in einer Positiv-Liste aufgeführt sind.
Um diese Liste zu ändern geht Ihr bei dem Template auf den Bereich Discovery rules und bearbeitet dort die Process Discovery:
Oben klickt Ihr dann auf den Reiter Filters:
Ihr könnt dort entweder den Prozessnamen angeben, dann muss links bei Label Macro
{#PSNAME}
stehen - oder den Benutzernamen unter dem Prozesse laufen, dann muss links
{#PSUSER}
stehen.
Über Remove entfernt Ihr einen Eintrag, unten über Add könnt Ihr eine neue Zeile hinzufügen}}
Man könnte natürlich auch über Administration - General - Regular expressions die Listen führen - aber so werden beim Export des Templates alle Filtereinstellungen mit Exportiert.
Für jeden Prozess wird auch ein Trigger erstellt der auslöst wenn die Anzahl der laufenden Prozesse unter 1 sinkt.
Fehlersuche
- Der Discovery-Prozess findet nur einmal pro Stunde statt - schaut ggf. beim Host in den Discovery rules nach ob diese Regel am Ende der Zeile ein rotes Symbol bekommt. Geht Ihr mit den Mauszeiger über das Symbol so bekommt Ihr eine genauere Fehlermeldung.
- Die Items sind alle vom Typ Zabbix agent (active). Damit das Funktioniert muss in der Konfigurationsdatei des Agenten zwingend der Parameter
ServerActive=192.168.123.123
- angegeben sein - natürlich dann mit der IP-Adresse eures Zabbix-Servers oder Proxys
- Die Zeit für Abfragen ist in Zabbix limitiert. Als Default steht der Wert auf 3 Sekunden, alles was länger dauert wird terminiert.
Testet ggf. mal die LLD per
zabbix_agentd -c /usr/local/etc/zabbix_agentd.conf -t dg.ps.discovery
- Falls es zu lange dauert müsst Ihr den Wert von
Timeout=
in der Konfigurationsdatei anpassen.