Zabbix:Template Windows Top 5 Prozesse ermitteln: Unterschied zwischen den Versionen
Aus znilwiki
BLinz (Diskussion | Beiträge) KKeine Bearbeitungszusammenfassung |
BLinz (Diskussion | Beiträge) |
||
Zeile 75: | Zeile 75: | ||
] | ] | ||
</source> | </source> | ||
Daraus bauen wir uns nun über die {{Key|Dependent item}} Funktion von Zabbix die einzelnen Items:<br> | |||
:[[Datei:ClipCapIt-201107-124544.PNG]]<br> | |||
:[[Datei:ClipCapIt-201107-124658.PNG]]<br> | |||
Also für den Namen des 1. Prozesses die folgenden Werte: | |||
Name: #1 Process Name | |||
Type: Dependent item | |||
Key: znil.Top5Processes.1.Name | |||
Master item: RAW JSON - Top 5 Processes | |||
Type of information: Character | |||
History storage period: 14d | |||
Applications: Top 5 Processes | |||
Unter {{Key|PreProcessing}} stellen wir folgendes ein:<br> | |||
JSONPath $[0].Name | |||
<br> | |||
Das Item speichern und noch 2 mal Klonen mit folgenden Einstellungen:<br> | |||
<u>'''Prozess ID:'''</u><br> | |||
Name: #1 Process ID | |||
Type: Dependent item | |||
Key: znil.Top5Processes.1.IDProcess | |||
Master item: RAW JSON - Top 5 Processes | |||
Type of information: Numeric (unsigned) | |||
History storage period: 14d | |||
Trend storage period: Do not keep trends | |||
Applications: Top 5 Processes | |||
Unter {{Key|PreProcessing}} stellen wir folgendes ein:<br> | |||
JSONPath $[0].IDProcess | |||
<br> | |||
<u>'''CPU Zeitanteil in Prozent:'''</u><br> | |||
Name: #1 Process Percent Processor Time | |||
Type: Dependent item | |||
Key: znil.Top5Processes.1.PercentProcessorTime | |||
Master item: RAW JSON - Top 5 Processes | |||
Type of information: Numeric (unsigned) | |||
Unit: % | |||
History storage period: 14d | |||
Trend storage period: Do not keep trends | |||
Applications: Top 5 Processes | |||
Unter {{Key|PreProcessing}} stellen wir folgendes ein:<br> | |||
JSONPath $[0].PercentProcessorTime | |||
<br> | |||
Damit haben wir alle Daten des ersten Prozesses (und das ist der mit der höchsten CPU Last):<br> | |||
:[[Datei:ClipCapIt-201107-130223.PNG]]<br> | |||
<br> | |||
Jetzt müssen wir das für die Prozesse 2 bis 5 für alle 3 Items wiederholen:<br> | |||
* Bei '''''Name''''' die Nummer erhöhen (#2, #3, #4 und #5) | |||
* Bei '''''Key''''' die Nummer auf den gleichen Wert erhöhen (znil.Top5Processes.2 bis znil.Top5Processes.5) | |||
* Unter '''''Preprocessing''''' die Nummer ebenfalls erhöhen ( $[1]. bis $[4]., immer um 1 kleiner als das Item selbst):<br> | |||
Die Items werden jedesmal neu mit Daten gefüllt wenn ein neuer JSON eintrifft.<br> | |||
Wird der Host von einem Proxy überwacht so muss auch dieser erst die Konfiguration vom Server übernehmen (Standard einmal die Stunde), offensichtlich baut dann der Proxy den JSON auseinander.<br> | |||
<br> | |||
:[[Datei:ClipCapIt-201107-131516.PNG]]<br> | |||
<br> | |||
---- | |||
==Fertiges Template== | |||
Hier das Template für Zabbix 5.0.x:<br> | |||
Bitte beachtet das Ihr trotzdem noch die UserParameter-Einstellungen machen müsst!<br> | |||
==Kommentare== | |||
<comments /> |
Version vom 7. November 2020, 13:16 Uhr
Changelog:
- 07.11.2020 erste Version
Vorwort
Ich hatte gerade privat das Problem das einer meiner Windows-Server zwischendurch ständig eine hohe CPU-Last meldet (bei mir ein "über 90% CPU Auslastung für mehr als 5 Minuten").
Und immer wenn ich nachgesehen habe war natürlich alles in Ordnung ...
Also habe ich mir überlegt ständig die 5 Prozesse mit der höchsten CPU-Auslastung zu ermitteln.
Dann muss ich bei einem Alarm ja nur die Werte mit dieser Liste abgleichen bzw. kann diese ja ggf. im Trigger gleich mit angeben.
Nachfolgend findet Ihr die Schritt für Schritt Anleitung, am Ende gibt es auch ein Download des fertigen Templates.
Das Grund-Item (RAW JSON Item)
Ich arbeite inzwischen gerne mit JSONs in Zabbix. Auf die Art kann ich hier zum Beispiel alle Werte der Top 5 Prozesse in einem Rutsch übergeben und mir trotzdem daraus 15 Werte holen.
Früher hätte ich das mit einem Skript und 15 mal zabbix_sender.exe
Aufrufen geholfen - das hier finde ich viel eleganter.
Das JSON zerpflückt der Zabbix-Server dann in die Einzelwerte.
Variante 1 per Userparameter
Zunächst müssen wir dem ZabbixAgenten einen neuen Befehl beibringen:
Auf eurem Windows-System öffnet Ihr die Konfigurationsdatei eures Zabbix-Agenten ( zabbix_agentd.win.conf )und fügt folgende Zeile ein:
UserParameter=znil.Top5Processes,powershell "Get-WmiObject Win32_PerfFormattedData_PerfProc_Process | where-object { $_.Name -ne \"_Total\" -and $_.Name -ne \"Idle\"} | Sort-Object PercentProcessorTime -Descending | select -First 5 | select Name,IDProcess,PercentProcessorTime | ConvertTo-Json -Compress"
Danach den Dienst des Zabbix-Agenten neu starten.
Lokal testen könnt Ihr das mit folgendem Befehl:
zabbix_agentd.exe -c zabbix_agentd.win.conf -t znil.Top5Processes
Den solltet Ihr im Verzeichnis des Zabbix-Agenten ausführen. Mit -c
wird die Konfigurationsdatei angegeben.
Dann erstellen wir in Zabbix ein Item:
Name: RAW JSON - Top 5 Processes Type: Zabbix agent (active) Key: znil.Top5Processes Type of information: Text Update interval: 1m History storage period: 1d New application: Top 5 Processes
Das Item erstellt Ihr entweder in einem Template und weißt es einem Host zu (empfohlen) oder Ihr erstellt es direkt auf einem Host.
Nach einer Weile sollte es einen JSON als Wert zurück liefern:
Damit ist das Grund-Item fertig.
Die Einzel-Items für die Top 5 Prozesse
Das Grund-Item liefert uns ein JSON wie in diesem Beispiel:
[
{
"Name": "BlueIris",
"IDProcess": 19000,
"PercentProcessorTime": 73
},
{
"Name": "rsync#14",
"IDProcess": 18980,
"PercentProcessorTime": 11
},
{
"Name": "System",
"IDProcess": 4,
"PercentProcessorTime": 5
},
{
"Name": "WmiPrvSE#1",
"IDProcess": 6400,
"PercentProcessorTime": 5
},
{
"Name": "svchost#14",
"IDProcess": 1688,
"PercentProcessorTime": 0
}
]
Daraus bauen wir uns nun über die Dependent item Funktion von Zabbix die einzelnen Items:
Also für den Namen des 1. Prozesses die folgenden Werte:
Name: #1 Process Name Type: Dependent item Key: znil.Top5Processes.1.Name Master item: RAW JSON - Top 5 Processes Type of information: Character History storage period: 14d Applications: Top 5 Processes
Unter PreProcessing stellen wir folgendes ein:
JSONPath $[0].Name
Das Item speichern und noch 2 mal Klonen mit folgenden Einstellungen:
Prozess ID:
Name: #1 Process ID Type: Dependent item Key: znil.Top5Processes.1.IDProcess Master item: RAW JSON - Top 5 Processes Type of information: Numeric (unsigned) History storage period: 14d Trend storage period: Do not keep trends Applications: Top 5 Processes
Unter PreProcessing stellen wir folgendes ein:
JSONPath $[0].IDProcess
CPU Zeitanteil in Prozent:
Name: #1 Process Percent Processor Time Type: Dependent item Key: znil.Top5Processes.1.PercentProcessorTime Master item: RAW JSON - Top 5 Processes Type of information: Numeric (unsigned) Unit: % History storage period: 14d Trend storage period: Do not keep trends Applications: Top 5 Processes
Unter PreProcessing stellen wir folgendes ein:
JSONPath $[0].PercentProcessorTime
Damit haben wir alle Daten des ersten Prozesses (und das ist der mit der höchsten CPU Last):
Jetzt müssen wir das für die Prozesse 2 bis 5 für alle 3 Items wiederholen:
- Bei Name die Nummer erhöhen (#2, #3, #4 und #5)
- Bei Key die Nummer auf den gleichen Wert erhöhen (znil.Top5Processes.2 bis znil.Top5Processes.5)
- Unter Preprocessing die Nummer ebenfalls erhöhen ( $[1]. bis $[4]., immer um 1 kleiner als das Item selbst):
Die Items werden jedesmal neu mit Daten gefüllt wenn ein neuer JSON eintrifft.
Wird der Host von einem Proxy überwacht so muss auch dieser erst die Konfiguration vom Server übernehmen (Standard einmal die Stunde), offensichtlich baut dann der Proxy den JSON auseinander.
Fertiges Template
Hier das Template für Zabbix 5.0.x:
Bitte beachtet das Ihr trotzdem noch die UserParameter-Einstellungen machen müsst!