Aktionen

Zabbix:Template Linux Process Discovery

Aus znilwiki

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.



1 Vorschau

Template-Linux-Process-LLD-001.png

Template-Linux-Process-LLD-002.png



2 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.



3 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
...




4 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:
Template-Linux-Process-LLD-003.png
Oben klickt Ihr dann auf den Reiter Filters:
Template-Linux-Process-LLD-004.png
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.


5 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.




6 Kommentare


Kommentar hinzufügen
znilwiki freut sich über alle Kommentare. Sofern du nicht anonym bleiben möchtest, trage deinen Namen oder deine Email-Adresse ein oder melde dich an. Du kannst das Feld auch einfach leer lassen.