Aktionen

Zabbix Item Anzahl der Events eines Hosts innerhalb eines Zeitraumes überwachen

Aus znilwiki

Version vom 14. Mai 2021, 22:16 Uhr von BLinz (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Changelog:

  • 12.12.2017 erste Version
  • 14.05.2021 grep eingebaut der die Warnung wegen dem Passwort unterdrückt



Aufgabenstellung:

Bei einem Kunden gab es einen Host der innerhalb einer Stunde hunderte von Events auslöste. Also das ein Trigger auf PROBLEM und wieder zurück auf OK sprang. Es ware mehre Items betroffen - und jetzt kommt der Knackpunkt - kein Trigger löste lang genug aus als das Zabbix eine Benachrichtigung versendet hätte.
Die Trigger werden beim Kunden zwar direkt in der Weboberfläche angezeigt, eine Email-Benachrichtung wird aber erst mit 4 Minuten verzögerung versandt.


Skript

Ich habe es mit dem folgendem Skript im externalscripts Verzeichnis des Zabbix-Servers gelöst:

znil.eventcheck.sh
#!/bin/sh
# Anzahl der Events eines Hosts für die letzte Stunde abfragen
# 1. Parameter {HOST.HOST}  = Hostname
# 12.12.2017 Bernhard Linz DATAGROUP

# Für den Zugriff auf die Datenbank:
myUser=zabbix
myPassword=zabbix
myDatabase=zabbix

#Für die Abfrage, Abfragezeitraum in Stunden
myTimeperiod=1

if [ "$1" = "" ]; then
    echo "No Hostname!"
    exit
fi

# Abfrage
myResult=`mysql -sN -u$myUser -p$myPassword $myDatabase -e "SELECT COUNT(*) FROM events JOIN triggers ON events.objectid = triggers.triggerid JOIN functions ON functions.triggerid = triggers.triggerid JOIN items ON items.itemid = functions.itemid JOIN hosts ON items.hostid = hosts.hostid WHERE events.source = 0 AND LOWER(hosts.host) like LOWER('$1') AND events.clock>=unix_timestamp( (NOW() - INTERVAL $myTimeperiod HOUR) ) AND events.clock<=unix_timestamp( NOW() ) ORDER BY events.clock DESC;" 2>&1 | grep -v "insecure"`

# Ergebnis ausgeben
echo $myResult

Anpassen müsst Ihr die Zugangsdaten zur Zabbix-Datenbank. Das Skript geht davon aus das die Datenbank auf dem gleichen Host wie der Zabbix-Server liegt (ansonsten den MySQL-Aufruf anpassen).
Das Skript muss nun noch ausführbar gemacht werden:

chmod +x znil.eventcheck.sh

Testen könnt Ihr es mit dem folgenden Aufruf:<r>

./znil.eventcheck.sh Name_des_Host


Es wird nur die Anzahl der Events der letzten 60 Minuten zurück gegeben.


Item

Wir erstellen ein Item - am besten in einem neuen eigenen Template:

ClipCapIt-171212-195031.PNG

Der Key ist:

znil.eventcheck.sh[{HOST.HOST}]

Den Rest nach eigenem ermessen.

Ich lasse den Wert alle 30 Minuten ermitteln - Rückwirkend für die letzte Stunde. Erfahrungswerte gibt es noch nicht. Die Abfrage der Datenbank ist - bei meinen Systemen - sehr schnell (unter eine Sekunde). Wenn man das für über 1.000 Host loslässt sollte man die Last im Auge behalten.


Problem

Da die Abfrage als "externalscripts" ausgeführt wird klappt das ganz nicht bei Hosts die über einen Proxy laufen.
Lösung suche ich noch.


Kommentare

Loading comments...