Zabbix Datenbank auslesen

Itemwerte ablesen

SELECT  h.host,
        h.proxy_hostid,
        i.key_,
        i.lastvalue,
        FROM_UNIXTIME(i.lastclock) AS `date`
FROM    items i
JOIN    hosts h ON (h.hostid = i.hostid)
WHERE   i.lastvalue IS NOT NULL 
ORDER BY i.lastclock DESC
LIMIT 10;

Liefert die letzten 10 gemessenen Items und ihre Werte.

Trigger (Alarme) auslesen

SELECT 
	t.triggerid,
	t.description,
	FROM_UNIXTIME(t.lastchange) AS date_time,
	t.value,
	t.priority,
	t.lastchange,
	h.hostid,
	h.host,
	i.status
FROM triggers t 
JOIN functions f ON (f.triggerid = t.triggerid)
JOIN items i     ON (i.itemid = f.itemid)
JOIN hosts h     ON (h.hostid = i.hostid)
WHERE h.status= 0 AND 
	  t.value = 1 AND 
	  t.status=0 AND
	  i.status=0
ORDER BY t.priority DESC,h.host

Liefert alle Trigger zurück, die auf Status=Problem stehen. Das bedeutet, mit dieser Abfrage erhalten Sie alle Alarme. Diese Query berücksichtigt nicht die ggf. eingerichteten Abhängigkeiten zwischen den Triggern.

Wenn Sie auch die Abhängigkeiten unter den Triggern auslesen wollen, verwenden Sie folgende Abfrage.

SELECT 
	t.triggerid,
	t.description,
	FROM_UNIXTIME(t.lastchange) AS date_time,
	t.value,
	t.priority,
	t.lastchange,
	d.triggerid_up as depends_on_trigger,
	d.triggerdepid,
	h.hostid,
	h.host,
	i.status
FROM triggers t 
JOIN functions f ON (f.triggerid = t.triggerid)
JOIN items i     ON (i.itemid = f.itemid)
JOIN hosts h     ON (h.hostid = i.hostid)
LEFT JOIN trigger_depends d ON (d.triggerid_down = t.triggerid)
WHERE h.status= 0 AND 
	  t.value = 1 AND 
	  t.status=0 AND
	  i.status=0
ORDER BY t.priority DESC,h.host

Anzahl aktiver Trigger ermitteln

Folgender SQL-Query lifert die Anzahl der Trigger die auf "Problem" stehen.

SELECT count(t.triggerid) AS counter
FROM triggers  t 
JOIN functions f ON (f.triggerid = t.triggerid)
JOIN items i     ON (i.itemid    = f.itemid)
JOIN hosts h     ON (h.hostid     = i.hostid)
WHERE h.status= 0  
AND   t.value = 1  
AND   t.status=0
AND   i.status=0

Anzahl der übersehenen Alarme ermitteln

Folgende Query liefert die Anzahl der Trigger zurück, die seit mehr als einer Stunde bestehen und nicht bestätigt (acknowledged) wurden.

SELECT count(t.triggerid) AS counter
FROM triggers t 
JOIN functions f ON (f.triggerid = t.triggerid)
JOIN items i     ON (i.itemid = f.itemid)
JOIN hosts h     ON (h.hostid = i.hostid)
JOIN events e    ON (e.objectid = t.triggerid)
WHERE t.lastchange = e.clock
  AND h.status= 0  
  AND t.value = 1
  AND t.status = 0 
  AND i.status = 0
  AND t.lastchange <(UNIX_TIMESTAMP()-3600)
  AND e.acknowledged = 0

Hosts auflisten

SELECT 	h.hostid,
	h.host,
	h.ip,
	h.dns,
	g.`name`
FROM 	hosts h
JOIN 	hosts_groups hg ON (hg.hostid = h.hostid)
JOIN 	groups g ON (g.groupid = hg.groupid)

Liefert alle konfigurierten Hosts inkl. Gruppen zurück.

Fehlerhafte Items (Unsupported Items)

SELECT   h.host,
         i.name,
         i.key_,
         i.`status`,
         i.`state`
FROM     items i
JOIN     hosts h ON (h.hostid = i.hostid)
WHERE    i.`state` = 1
AND      i.`status` = 0
LIMIT 100;

Liefert alle Hosts und Items zurück, die nicht überwacht werden können. (State = 1 bedeutet "Item Error: Not supported)

Verwechseln Sie nicht status und state. Status gibt an, ob das Item aktiv (1) oder inaktiv (0) ist. State gibt an, ob Daten erfolgreich abgerufen werden.
SELECT   
         count(i.key_),
         i.name,
         i.key_
FROM     items i
WHERE    i.`state` = 1
AND      i.`status` = 0
GROUP BY i.key_
ORDER BY count(i.key_) DESC
LIMIT 100;

Liefert die Items, welche die meisten Fehler produzieren.

Triggerhistorie auslesen

SELECT h.`host`,t.description,t.priority,FROM_UNIXTIME(e.clock)
FROM events e
JOIN `triggers` t ON(t.triggerid = e.objectid)
JOIN functions f ON (f.triggerid = t.triggerid)
JOIN items i     ON (i.itemid = f.itemid)
JOIN hosts h     ON (h.hostid = i.hostid)
WHERE e.source = 0
AND e.`value` = 1
AND e.clock > (UNIX_TIMESTAMP() - 3600)
ORDER BY e.clock DESC

Liefert alle Trigger zurück, die in der letzten Stunde ausgelöst wurden.