Aktionen

Zabbix API mit cURL unter Windows abfragen

Aus znilwiki

Ich wollte ein paar Dinge aus der Zabbix-API ziehen und im Anschluss weiter verarbeiten.
Dabei wollte ich aber nicht die ganzen php-Frameworks etc. nutzen - und vor allen wollte ich es unter Windows nutzen - da soll am Ende ein AutoIt Programm bei rauskommen für Reports

Als Hilfsmittel habe ich cURL genommen, für Windows findet Ihr es unter http://curl.haxx.se/download.html
Ich habe dort die "Win32 - Generic" bzw. "Win64 - Generic" Versionen genommen mit SSL Unterstützung.

Als erste Vorlage / Ideenlieferant dazu hatte ich diese Seite im Internet gefunden: http://doc.bonfire-project.eu/R2/monitoring/monitoring_zabbix_API.html
Leider sind die Bespiele zum einen für eine alte Zabbix-Version geschrieben, zum anderen für die Linux-Version.

Ich hab das ganze hier mal für Windows umgesetzt. cURL möchte die Angaben alle in Anführungszeichen haben ... wir benötigen die Anfürhungszeichen aber auch für die Parameterübergabe. Die Anführungszeichen für die Parameter müssen deshalb alle ein \ davor haben (Escaping)


1 Rahmenbedingungen


1.1 curl.exe

curl.exe liegt im Suchpfad oder im gleichen Verzeichnis
Bei allen nachfolgenden Befehlen mit curl.exe kann man am Anfang auch noch ein

-i     = Ausführliche Antwort zeigen (Er zeigt dann alles an was er Empfängt, nicht nur den eigentlichen Text)

einbauen - zur Fehlersuche.
Mit

-k

klappt es auch bei https-Verbindungen



1.2 Adresse Zabbix API

Zabbix Server API ist über

http://10.106.207.105/api_jsonrpc.php

zu erreichen. Ich habe Zabbix aber so installiert das man im Webbrowser kein /zabbix angeben muss. Ihr müsst also eventuell

http://IP_oder_DNSNAME/zabbix/api_jsonrpc.php

angeben!





2 Anmeldung

Wir müssen uns einmal an der API anmelden und erhalten als Antort ein Token. Später verwenden wir nur noch dieses Token statt Benutzernamen und Passwort.



2.1 user.login

Das nachfolgende muss alles in einer Zeile stehen, ich habs hier nur zur Lesbarkeit in mehrere Zeilen kopiert!

curl.exe -X POST 
         -H "Content-Type:application/json"  
         -d "{\"jsonrpc\": \"2.0\",\"method\":\"user.login\",\"params\":{\"user\":\"admin\",\"password\":\"test1234\"},\"id\":1}"
         http://10.106.207.105/api_jsonrpc.php

hier nochmal in einer Zeile:

curl.exe -X POST -H "Content-Type:application/json"  -d "{\"jsonrpc\": \"2.0\",\"method\":\"user.login\",\"params\":{\"user\":\"admin\",\"password\":\"test1234\"},\"id\":1}" http://10.106.207.105/api_jsonrpc.php

hier die Erklärung der Parameter (erspare ich mir später)

-X POST
Wir wollen etwas senden

-H "Content-Type:application/json"
Das ist der Header den wir angeben, sprich welches Format hat das was wir senden (hier: json Syntax)

-d "{\"jsonrpc\": \"2.0\",\"method\":\"user.login\",\"params\":{\"user\":\"admin\",\"password\":\"test1234\"},\"id\":1}"
Gemäß https://www.zabbix.com/documentation/2.0/manual/appendix/api/user/login 
melden wir uns mit unserem Benutzer an (Benutzer: admin, Passwort: test1234)

http://10.106.207.105/api_jsonrpc.php
Adresse zur Zabbix API (ggf. mit /zabbix/ dawischen, siehe Hinweise bei Rahmenbedingungen



Als Antwort bekommen wir:

{"jsonrpc":"2.0","result":"3be40c8810a03c7e60ba1fe194c7514b","id":1}

Die lange Hexadezimale Zahl ist unser Token



3 Hosts abfragen




3.1 Gezielt bestimmten Host abfragen

Wir fragen gezielt Daten des Hosts SERVER ab:

curl.exe -X POST 
         -H "Content-Type: application/json" 
         -d"{\"jsonrpc\":\"2.0\",\"method\":\"host.get\",\"params\":{\"output\":\"extend\",\"filter\":{\"host\":\"SERVER\"}},\"auth\":\"3be40c8810a03c7e60ba1fe194c7514b\",\"id\":1}"
         http://10.106.207.105/api_jsonrpc.php

curl.exe -X POST -H "Content-Type: application/json" -d"{\"jsonrpc\":\"2.0\",\"method\":\"host.get\",\"params\":{\"output\":\"extend\",\"filter\":{\"host\":\"SERVER\"}},\"auth\":\"3be40c8810a03c7e60ba1fe194c7514b\",\"id\":1}" http://10.106.207.105/api_jsonrpc.php

Details siehe: https://www.zabbix.com/documentation/2.0/manual/appendix/api/host/get Wichtig ist die Tokennummer Antwort:

{"jsonrpc":"2.0","result":[{"maintenances":[],"hostid":"100100000010111","proxy_hostid":"0","host":"SERVER","status":"0","disable_until":"0","error":"","available":"1","errors_from":"0","lastaccess":"0","ipmi_authtype":"-1","ipmi_privilege":"2","ipmi_username":"","ipmi_password":"","ipmi_disable_until":"0","ipmi_available":"0","snmp_disable_until":"0","snmp_available":"0","maintenanceid":"0","maintenance_status":"0","maintenance_type":"0","maintenance_from":"0","ipmi_errors_from":"0","snmp_errors_from":"0","ipmi_error":"","snmp_error":"","jmx_disable_until":"0","jmx_available":"0","jmx_errors_from":"0","jmx_error":"","name":"SERVER"}],"id":1}

oder besser aufgedröselt:

{"jsonrpc":"2.0","result":[{
                              "maintenances":[],
                              "hostid":"100100000010111",
                              "proxy_hostid":"0",
                              "host":"SERVER",
                              "status":"0",
                              "disable_until":"0",
                              "error":"",
                              "available":"1",
                              "errors_from":"0",
                              "lastaccess":"0",
                              "ipmi_authtype":"-1",
                              "ipmi_privilege":"2",
                              "ipmi_username":"",
                              "ipmi_password":"",
                              "ipmi_disable_until":"0",
                              "ipmi_available":"0",
                              "snmp_disable_until":"0",
                              "snmp_available":"0",
                              "maintenanceid":"0",
                              "maintenance_status":"0",
                              "maintenance_type":"0",
                              "maintenance_from":"0",
                              "ipmi_errors_from":"0",
                              "snmp_errors_from":"0",
                              "ipmi_error":"",
                              "snmp_error":"",
                              "jmx_disable_until":"0",
                              "jmx_available":"0",
                              "jmx_errors_from":"0",
                              "jmx_error":"",
                              "name":"SERVER"
}],"id":1}




3.2 Liste aller Hosts abfragen

Folgender Befehl findet alle Hosts in allen Gruppen, sortiert nach Namen!

curl.exe -X POST 
         -H "Content-Type: application/json" 
         -d"{\"jsonrpc\":\"2.0\",\"method\":\"host.get\",\"params\":{\"output\":[\"name\"],\"sortfield\":\"name\"},\"auth\":\"3be40c8810a03c7e60ba1fe194c7514b\",\"id\":1}"
         http://10.106.207.105/api_jsonrpc.php

curl.exe -X POST -H "Content-Type: application/json" -d"{\"jsonrpc\":\"2.0\",\"method\":\"host.get\",\"params\":{\"output\":[\"name\"],\"sortfield\":\"name\"},\"auth\":\"3be40c8810a03c7e60ba1fe194c7514b\",\"id\":1}" http://10.106.207.105/api_jsonrpc.php


ergibt folgende Liste: (normal als Fließtext, ich habs hier auseinandergedröselt)

{"jsonrpc":"2.0","result":[
                              {"hostid":"100100000010085","name":"ESXi06"},
                              {"hostid":"100100000010106","name":"EXSRV"},
                              {"hostid":"100100000010121","name":"KServer"},
                              {"hostid":"100100000010108","name":"MQSERVER1"},
                              {"hostid":"100100000010109","name":"MQSERVER2"},
                              {"hostid":"100100000010110","name":"MQTEL01"},
                              {"hostid":"100100000010089","name":"OBServer"},
                              {"hostid":"100100000010105","name":"S10"},
                              {"hostid":"100100000010104","name":"S11"},
                              {"hostid":"100100000010112","name":"S12"},
                              {"hostid":"100100000010113","name":"S13"},
                              {"hostid":"100100000010114","name":"S14"},
                              {"hostid":"100100000010115","name":"S15"},
                              {"hostid":"100100000010116","name":"S16"},
                              {"hostid":"100100000010117","name":"S17"},
                              {"hostid":"100100000010118","name":"S18"},
                              {"hostid":"100100000010119","name":"S19"},
                              {"hostid":"100100000010120","name":"S20"},
                              {"hostid":"100100000010111","name":"SERVER"},
                              {"hostid":"100100000010107","name":"SQLSRV"},
                              {"hostid":"100100000010101","name":"W2KDC"},
                              {"hostid":"100100000010102","name":"W2K8DC"},
                              {"hostid":"100100000010084","name":"Zabbix server"},
"id":1}



3.3 Liste aller Gruppen abfragen

Ergibt eine Liste aller Hostgruppen, alphabetisch sortiert:

curl.exe -X POST 
         -H "Content-Type: application/json" 
         -d"{\"jsonrpc\":\"2.0\",\"method\":\"hostgroup.get\",\"params\":{\"output\":[\"name\"],\"sortfield\":\"name\"},\"auth\":\"3be40c8810a03c7e60ba1fe194c7514b\",\"id\":1}"
         http://10.106.207.105/api_jsonrpc.php

curl.exe -X POST -H "Content-Type: application/json" -d"{\"jsonrpc\":\"2.0\",\"method\":\"hostgroup.get\",\"params\":{\"output\":[\"name\"],\"sortfield\":\"name\"},\"auth\":\"3be40c8810a03c7e60ba1fe194c7514b\",\"id\":1}" http://10.106.207.105/api_jsonrpc.php


Ausgabe:

{"jsonrpc":"2.0","result":[
                              {"groupid":"100100000000008","name":"Amt B"},
                              {"groupid":"100100000000009","name":"Amt C"},
                              {"groupid":"100100000000010","name":"Amt N"},
                              {"groupid":"100100000000011","name":"Amt O"},
                              {"groupid":"100100000000012","name":"Ball 1"},
                              {"groupid":"100100000000013","name":"Ball 2"},
                              {"groupid":"100100000000006","name":"Cluster"},
                              {"groupid":"100100000000005","name":"Discovered hosts"},
                              {"groupid":"100100000000014","name":"DKKH"},
                              {"groupid":"100100000000007","name":"Flieger"},
                              {"groupid":"100100000000015","name":"Für Günther"},
                              {"groupid":"100100000000016","name":"Göttingen-1"},
                              {"groupid":"100100000000017","name":"Göttingen-2"},
                              {"groupid":"100100000000002","name":"Linux servers"},
                              {"groupid":"100100000000020","name":"MSSQL"},
                              {"groupid":"100100000000001","name":"Templates"},
                              {"groupid":"100100000000004","name":"Zabbix servers"},
],"id":1}




3.4 Liste aller Hosts in Gruppe x abfragen

Wir wollen alle Hosts in der Gruppe MSSQL abfragen:
Zuerst müssen wir die ID der Gruppe MSSQL in Erfahrung bringen:

curl.exe -X POST 
         -H "Content-Type: application/json" 
         -d"{\"jsonrpc\":\"2.0\",\"method\":\"hostgroup.get\",\"params\":{\"output\":[\"name\"],\"filter\":{\"name\":\"MSSQL\"}},\"auth\":\"3be40c8810a03c7e60ba1fe194c7514b\",\"id\":1}" 
         http://10.106.207.105/api_jsonrpc.php

curl.exe -X POST -H "Content-Type: application/json" -d"{\"jsonrpc\":\"2.0\",\"method\":\"hostgroup.get\",\"params\":{\"output\":[\"name\"],\"filter\":{\"name\":\"MSSQL\"}},\"auth\":\"3be40c8810a03c7e60ba1fe194c7514b\",\"id\":1}" http://10.106.207.105/api_jsonrpc.php

Ausgabe:

{"jsonrpc":"2.0","result":[{"groupid":"100100000000020","name":"MSSQL"}],"id":1}

Die Group-ID ist also 100100000000020 Mit der Group-ID 100100000000020 können wir dann die Hosts abfragen - Listet alle Hosts in der Gruppe "MSSQL" auf:

curl.exe -X POST 
         -H "Content-Type: application/json" 
         -d"{\"jsonrpc\":\"2.0\",\"method\":\"host.get\",\"params\":{\"output\":[\"name\"],\"groupids\":\"100100000000020\"},\"auth\":\"3be40c8810a03c7e60ba1fe194c7514b\",\"id\":1}" 
         http://10.106.207.105/api_jsonrpc.php

curl.exe -X POST -H "Content-Type: application/json" -d"{\"jsonrpc\":\"2.0\",\"method\":\"host.get\",\"params\":{\"output\":[\"name\"],\"groupids\":\"100100000000020\"},\"auth\":\"3be40c8810a03c7e60ba1fe194c7514b\",\"id\":1}" http://10.106.207.105/api_jsonrpc.php

Ausgabe:

{"jsonrpc":"2.0","result":[
                              {"groups":[{"groupid":"100100000000020"}],"hostid":"100100000010108","name":"MSSLQSERVER1"},
                              {"groups":[{"groupid":"100100000000020"}],"hostid":"100100000010109","name":"MSSQLSERVER2"},
                              {"groups":[{"groupid":"100100000000020"}],"hostid":"100100000010110","name":"MQLTEL01"},
                              {"groups":[{"groupid":"100100000000020"}],"hostid":"100100000010111","name":"SERVER"}]
,"id":1}




3.5 Liste aller Items eines Hosts abfragen

In dem Beispiel hier fragen wir alle Items des Host SERVER abfragen.
Zunächste müssen wir die Host-ID des Hosts in Erfahrung bringen:

curl.exe -X POST 
         -H "Content-Type: application/json"
         -d"{\"jsonrpc\":\"2.0\",\"method\":\"host.get\",\"params\":{\"output\":\"shorten\",\"filter\":{\"host\":\"SERVER\"}},\"auth\":\"3be40c8810a03c7e60ba1fe194c7514b\",\"id\":1}"
         http://10.106.207.105/api_jsonrpc.php

curl.exe -X POST -H "Content-Type: application/json" -d"{\"jsonrpc\":\"2.0\",\"method\":\"host.get\",\"params\":{\"output\":\"shorten\",\"filter\":{\"host\":\"SERVER\"}},\"auth\":\"3be40c8810a03c7e60ba1fe194c7514b\",\"id\":1}" http://10.106.207.105/api_jsonrpc.php

Ausgabe:'

{"jsonrpc":"2.0","result":[{"hostid":"100100000010111"}],"id":1}


Mit dieser können wir dann die Items abfragen:

curl.exe -X POST 
         -H "Content-Type: application/json" 
         -d "{\"jsonrpc\":\"2.0\",\"method\":\"item.get\",\"params\":{\"output\":[\"name\"],\"filter\":{\"hostid\":\"100100000010111\"}},\"auth\":\"3be40c8810a03c7e60ba1fe194c7514b\",\"id\":1}" 
         http://10.106.207.105/api_jsonrpc.php

curl.exe -X POST -H "Content-Type: application/json" -d "{\"jsonrpc\":\"2.0\",\"method\":\"item.get\",\"params\":{\"output\":[\"name\"],\"filter\":{\"hostid\":\"100100000010111\"}},\"auth\":\"3be40c8810a03c7e60ba1fe194c7514b\",\"id\":1}" http://10.106.207.105/api_jsonrpc.php

Ausgabe:

{"jsonrpc":"2.0","result":[
                {"itemid":"100100000024179","name":"Host name of zabbix_agentd running"},
                {"itemid":"100100000024180","name":"Agent ping"},
                {"itemid":"100100000024181","name":"Version of zabbix_agent(d) running"},
                {"itemid":"100100000024182","name":"Average disk read queue length"},
                {"itemid":"100100000024183","name":"Average disk write queue length"},
                {"itemid":"100100000024184","name":"File read bytes per second"},
                {"itemid":"100100000024185","name":"File write bytes per second"},
                {"itemid":"100100000024186","name":"Number of threads"},
                {"itemid":"100100000024187","name":"Number of processes"},
                {"itemid":"100100000024188","name":"Processor load (15 min average)"},
                {"itemid":"100100000024189","name":"Processor load (1 min average)"},
                {"itemid":"100100000024190","name":"Processor load (5 min average)"},
                {"itemid":"100100000024191","name":"Free swap space"},
                {"itemid":"100100000024192","name":"Total swap space"},
                {"itemid":"100100000024193","name":"System information"},
                {"itemid":"100100000024194","name":"System uptime"},
                {"itemid":"100100000024195","name":"Free Disk Space C:\\"},
                {"itemid":"100100000024196","name":"Disk C:\\"},
                {"itemid":"100100000024197","name":"Free Disk Space D:\\"},
                {"itemid":"100100000024198","name":"Free Disk Space E:\\"},
                {"itemid":"100100000024199","name":"Free memory"},
                {"itemid":"100100000024200","name":"Total memory"}]
,"id":1}




3.6 ID eines bestimmten Items eines Hosts anhand des Names abfragen

Item "System uptime" auf dem Host abfragen (Host-D muss natürlich mit angegeben werden):

curl.exe -X POST 
         -H "Content-Type: application/json" 
         -d "{\"jsonrpc\":\"2.0\",\"method\":\"item.get\",\"params\":{\"output\":[\"name\"],
             \"filter\":{\hostid\":\"100100000010111\",\"name\":\"System uptime\"}},\"auth\":\"3be40c8810a03c7e60ba1fe194c7514b\",\"id\":1}" 
         http://10.106.207.105/api_jsonrpc.php

curl.exe -X POST -H "Content-Type: application/json" -d "{\"jsonrpc\":\"2.0\",\"method\":\"item.get\",\"params\":{\"output\":[\"name\"],\"filter\":{\hostid\":\"100100000010111\",\"name\":\"System uptime\"}},\"auth\":\"3be40c8810a03c7e60ba1fe194c7514b\",\"id\":1}" http://10.106.207.105/api_jsonrpc.php

Ausgabe:

{"jsonrpc":"2.0","result":[{"itemid":"100100000024194","name":"System uptime"}],"id":1}




4 Hinweis zu Itemwerten

Es gibt bei den Abfragen immer einen Wert

history:

Damit wird das Zahlenformat des Rückgabewertes angegeben.
Mögliche Werte sind:

0 - float
1 - string
2 - log; 
3 - integer 
4 - text

Der Wert sollte zu dem passen was beim Item angegeben ist.

Warning.png
Warnung: Wenn Ihr keine Werte zurückbekommt obwohl da welche sein müssten -> Probiert einen anderen Wert für History!!!



Man kann den richtigen Wert über "item.get" abfragen:

curl.exe -X POST -H "Content-Type: application/json" -d "{\"jsonrpc\":\"2.0\",\"method\": \"item.get\",\"params\":{\"output\":\"extend\",\"itemids\":[\"2002000000024464\"]},\"auth\":\"fdf42546cc122d7a7a6aafaa3b9b6d82\",\"id\":1}" http://192.168.3.1/zabbix/api_jsonrpc.php

 curl.exe -X POST 
          -H "Content-Type: application/json" 
          -d "{\"jsonrpc\":\"2.0\",\"method\": \"item.get\",\"params\":{\"output\":\"extend\",
              \"itemids\":[\"2002000000024464\"]},\"auth\":\"fdf42546cc122d7a7a6aafaa3b9b6d82\",\"id\":1}"
          http://192.168.3.1/zabbix/api_jsonrpc.php

Die Rückgabe sieht wie folgt aus:

{"jsonrpc":"2.0","result":[
   {"itemid":"2002000000024464",
        "type":"0",
        "snmp_community":"",
        "snmp_oid":"",
        "hostid":"2002000000010152",
        "name":"Free disk space",
        "key_":"datastore.size[{HOST.HOST},free]",
        "delay":"60",
        "history":"90",
        "trends":"365",
        "lastvalue":"278760783872",
        "lastclock":"1383135864",
        "prevvalue":"278760783872",
        "status":"0",
        "value_type":"3",
        "trapper_hosts":"",
        "units":"B",
        "multiplier":"0",
        "delta":"0",
        "prevorgvalue":"0",
        "snmpv3_securityname":"",
        "snmpv3_securitylevel":"0",
        "snmpv3_authpassphrase":"",
        "snmpv3_privpassphrase":"",
        "formula":"1",
        "error":"",
        "lastlogsize":"0",
        "logtimefmt":"",
        "templateid":"2002000000024300",
        "valuemapid":"0",
        "delay_flex":"",
        "params":"",
        "ipmi_sensor":"",
        "data_type":"0",
        "authtype":"0",
        "username":"",
        "password":"",
        "publickey":"",
        "privatekey":"",
        "mtime":"0",
        "lastns":"184745875",
        "flags":"0",
        "filter":"",
        "interfaceid":"2002000000000060",
        "port":"",
        "description":"",
        "inventory_link":"0",
        "lifetime":"30"
}],"id":1}

Und der richtige History-Wert ist der Wert bei

"value_type":"3",




4.1 Die letzten X Werte eines Items abfragen

Entscheidend ist der "limit" Parameter, hier 10. Abgefragt habe ich das Item "Processor load (5 min average)" des Host "SERVER" (ist ja die Item-ID, siehe oben)

curl.exe -X POST 
         -H "Content-Type: application/json" 
         -d "{\"jsonrpc\":\"2.0\",\"method\": \"history.get\",\"params\":{\"output\":\"extend\",\"history\":0,
             \"itemids\":[\"100100000024190\"],\"sortfield\":\"clock\",\"sortorder\":\"DESC\",\"limit\":10},
             \"auth\":\"3be40c8810a03c7e60ba1fe194c7514b\",\"id\":1}" http://10.106.207.105/api_jsonrpc.php

curl.exe -X POST -H "Content-Type: application/json" -d "{\"jsonrpc\":\"2.0\",\"method\": \"history.get\",\"params\":{\"output\":\"extend\",\"history\":0,\"itemids\":[\"100100000024190\"],\"sortfield\":\"clock\",\"sortorder\":\"DESC\",\"limit\":10},\"auth\":\"3be40c8810a03c7e60ba1fe194c7514b\",\"id\":1}" http://10.106.207.105/api_jsonrpc.php

Ausgabe:

{"jsonrpc":"2.0","result":[
                {"itemid":"100100000024190","clock":"1381830650","value":"0.0233","ns":"114173658"},
                {"itemid":"100100000024190","clock":"1381830589","value":"0.0167","ns":"37308873"},
                {"itemid":"100100000024190","clock":"1381830527","value":"0.0133","ns":"994331854"},
                {"itemid":"100100000024190","clock":"1381830466","value":"0.0567","ns":"824871648"},
                {"itemid":"100100000024190","clock":"1381830406","value":"0.1100","ns":"622690693"},
                {"itemid":"100100000024190","clock":"1381830344","value":"0.1167","ns":"916714067"},
                {"itemid":"100100000024190","clock":"1381830284","value":"0.1133","ns":"966625291"},
                {"itemid":"100100000024190","clock":"1381830223","value":"0.1067","ns":"925286313"},
                {"itemid":"100100000024190","clock":"1381830163","value":"0.0700","ns":"369212205"},
                {"itemid":"100100000024190","clock":"1381830100","value":"0.0200","ns":"694179380"}
],"id":1}



hier noch mal die Ausgabe bei Abfrage "Disk C:\" für den Host "SERVER", Item-ID 100100000024196, die letzten 4 Werte (der sollte sich ja nicht ändern)

curl.exe -X POST -H "Content-Type: application/json" -d "{\"jsonrpc\":\"2.0\",\"method\": \"history.get\",\"params\":{\"output\":\"extend\",\"history\":0,\"itemids\":[\"100100000024196\"],\"sortfield\":\"clock\",\"sortorder\":\"DESC\",\"limit\":4},\"auth\":\"3be40c8810a03c7e60ba1fe194c7514b\",\"id\":1}" http://10.106.207.105/api_jsonrpc.php

Ausgabe:

{"jsonrpc":"2.0","result":[
                {"itemid":"100100000024196","clock":"1381832884","value":"31459717120.0000","ns":"70175739"},
                {"itemid":"100100000024196","clock":"1381832854","value":"31459717120.0000","ns":"214846936"},
                {"itemid":"100100000024196","clock":"1381832823","value":"31459717120.0000","ns":"252300665"},
                {"itemid":"100100000024196","clock":"1381832792","value":"31459717120.0000","ns":"547505348"}
],"id":1}

Erklärung der Werte:

{"itemid":"100100000024196","clock":"1381832884","value":"31459717120.0000","ns":"70175739"},

"itemid":"100100000024196"    : Die ID des Items, hier "Disk C:\" des Hosts "SERVER" (muss ermitelt werden vor Abfrage
"clock":"1381832884",         : Von wann ist der Wert im UNIX-Timestamp Format (= 15.10.2013 12:28:04)
"value":"31459717120.0000"    : Wert des Items, hier 31.459.717.120 Byte = 29,30 GByte
"ns":"70175739"}              : Nanosekunden als der Wert empfangen wurde (wofür auch immer)




4.2 Werte eines Items für Zeitraum X abfragen

Nun wird es komplizierter ... die Datum/Zeit-Angaben müssen wir in einen UNIX-Timestamp umrechen - und nein, das macht man nicht eben so.
Nehmt eines der vorhandenen Tools aus dem Internet - ich werde auch noch ein Kommandozeilentool schreiben.
Ich frage nachfolgend folgenden Zeitraum ab:

14.10.2013 08:00:00    ==>   1381737600
bis
14.10.2013 17:00:00    ==>   1381770000



curl.exe -X POST 
         -H "Content-Type: application/json" 
         -d "{\"jsonrpc\":\"2.0\",\"method\": \"history.get\",\"params\":{\"output\":\"extend\",\"history\":0,
            \"itemids\":[\"100100000024196\"],\"sortfield\":\"clock\",\"sortorder\":\"DESC\",
            \"time_from\":\"1381737600\",\"time_till\":\"1381770000\"},\"auth\":\"3be40c8810a03c7e60ba1fe194c7514b\",\"id\":1}" 
         http://10.106.207.105/api_jsonrpc.php

curl.exe -X POST -H "Content-Type: application/json" -d "{\"jsonrpc\":\"2.0\",\"method\": \"history.get\",\"params\":{\"output\":\"extend\",\"history\":0,\"itemids\":[\"100100000024196\"],\"sortfield\":\"clock\",\"sortorder\":\"DESC\",\"time_from\":\"1381737600\",\"time_till\":\"1381770000\"},\"auth\":\"3be40c8810a03c7e60ba1fe194c7514b\",\"id\":1}" http://10.106.207.105/api_jsonrpc.php

Ausgabe: (gekürzt, sind 1063 Werte)

 {"jsonrpc":"2.0","result":[
               {"itemid":"100100000024196","clock":"1381769995","value":"31459717120.0000","ns":"22289698"},
               {"itemid":"100100000024196","clock":"1381769965","value":"31459717120.0000","ns":"373646510"},
               {"itemid":"100100000024196","clock":"1381769935","value":"31459717120.0000","ns":"516204202"},
               {"itemid":"100100000024196","clock":"1381769904","value":"31459717120.0000","ns":"642602519"},
               {"itemid":"100100000024196","clock":"1381769873","value":"31459717120.0000","ns":"759310056"},
               {"itemid":"100100000024196","clock":"1381769842","value":"31459717120.0000","ns":"118481494"},
               {"itemid":"100100000024196","clock":"1381769812","value":"31459717120.0000","ns":"258240633"},
               ...
               ...
               {"itemid":"100100000024196","clock":"1381737753","value":"31459717120.0000","ns":"464421332"},
               {"itemid":"100100000024196","clock":"1381737723","value":"31459717120.0000","ns":"116896451"},
               {"itemid":"100100000024196","clock":"1381737693","value":"31459717120.0000","ns":"469424716"},
               {"itemid":"100100000024196","clock":"1381737662","value":"31459717120.0000","ns":"922421284"},
               {"itemid":"100100000024196","clock":"1381737631","value":"31459717120.0000","ns":"257596636"},
               {"itemid":"100100000024196","clock":"1381737601","value":"31459717120.0000","ns":"291164907"}
],"id":1}




5 Vorhandene Grafiken eines Host abfragen

Welche Grafiken für unseren Host SERVER sind vorhanden?
Methode 1: (graph.get) mit Host-ID

curl.exe -X POST 
         -H "Content-Type: application/json" 
         -d "{\"jsonrpc\":\"2.0\",\"method\":\"graph.get\",\"params\":{\"output\":\"extend\",\"hostids\":100100000010111,
              \"sortfield\":\"name\"},\"auth\":\"3be40c8810a03c7e60ba1fe194c7514b\",\"id\":1}"
         http://10.106.207.105/api_jsonrpc.php

curl.exe -X POST -H "Content-Type: application/json" -d "{\"jsonrpc\":\"2.0\",\"method\":\"graph.get\",\"params\":{\"output\":\"extend\",\"hostids\":100100000010111,\"sortfield\":\"name\"},\"auth\":\"3be40c8810a03c7e60ba1fe194c7514b\",\"id\":1}" http://10.106.207.105/api_jsonrpc.php

Methode 2: (graph.getobjects) mit Hostnamen

curl.exe -X POST -H "Content-Type: application/json" -d "{\"jsonrpc\":\"2.0\",\"method\":\"graph.getobjects\",\"params\":{\"host\":\"SERVER\"},\"auth\":\"3be40c8810a03c7e60ba1fe194c7514b\",\"id\":1}" http://10.106.207.105/api_jsonrpc.php

Ausgabe:

{"jsonrpc":"2.0","result":[
                 {"hosts":[{"hostid":"100100000010111"}],
                         "graphid":"100100000000671",
                         "name":"CPU load",
                         "width":"900",
                         "height":"200",
                         "yaxismin":"0.0000",
                         "yaxismax":"100.0000",
                         "templateid":"100100000000531",
                         "show_work_period":"1",
                         "show_triggers":"1",
                         "graphtype":"0",
                         "show_legend":"1",
                         "show_3d":"0",
                         "percent_left":"0.0000",
                         "percent_right":"0.0000",
                         "ymin_type":"1",
                         "ymax_type":"0",
                         "ymin_itemid":"0",
                         "ymax_itemid":"0",
                         "flags":"0"}
],"id":1}

In diesem Fall eine also eine bescheidene Grafik über die CPU-Auslastung.



5.1 Grafiken aus Zabbix herunterladen

Wir wollen nun die Grafik herunterladen die wir zuvor ermittelt haben.
Das geht NICHT über die API, da müssen wir über das normale Webinterface gehen ...
Ich war so nett auch dies mit cURL zu realisieren (hatte es erst mit wget probiert)

5.1.1 An Zabbix Webseite mit cURL anmelden

In diesem Beispiel ist mein Benutzer Admin mit dem Kennwort geheim
Die normale Login-Seite erreicht man unter

http://10.106.207.105/index.php

Ihr müsst ggf. noch ein zabbix/ dazwischen setzen.

Aufruf wie folgt:

curl.exe -X POST --cookie-jar tmpjar --cookie tmpjar -d name="Admin" -d password="geheim" -d enter="Sign in" http://10.106.207.105/index.php

         -X POST                            : Wir wollen etwas an die Webseite senden
         --cookie-jar tmpjar                : erstelle ein Cookie tmpjar" im aktuellen Verzeichnis (Pfadangaben wären erlaubt)
         --cookie tmpjar                    : Benutze für die aktuelle Sitzung das Cookie "tmpjar" im aktuellen Verzeichnis
         -d name="Admin"                    : Schreibe in das Formularfeld name das Wort "Admin"
         -d password="geheim"               : Schreibe in das Formularfeld password das Wort "geheim"
         -d enter="Sign in"                 : Drücke den Butten der mit "Sign in" Beschriftet ist
         http://10.106.207.105/index.php    : Adresse der Login-Seite

Als Rückmeldung bekommt Ihr wenn es geklaptt hat - nichts -
Wenn es nicht klappt kommt jede Menge html-Code.


5.1.2 gezielt bestimmte Grafik anfordern

Weiter oben haben wir vom Host SERVER die vorhandenen Grafiken ermittelt (eine) mit der

"graphid":"100100000000671"

Diese ID brauchen wir nun!

curl.exe --cookie tmpjar -o grafik.png --remote-name "http://10.106.207.105/chart2.php?graphid=100100000000671&width=900&height=300&period=7200&stime=20131015083000"

         --cookie tmpjar                         : Den zuvor erstellten (bei der Anmeldung) Cookie verwenden 
         -o grafik.png                           : Unter diesem Namen wird die Grafik gespeichert (Pfadangaben erlaubt)
         --remote-name                           : Webseite von der wir herunterladen wollen (-O wäre auch ok gewesen)
           "http://10.106.207.105/chart2.php?    : URL von Zabbix, statt login.php hier die chart2.php
           graphid=100100000000671               : ID der Grafik angeben wie ermittelt
           &width=900                            : Breite der Grafik in Pixeln
           &height=300                           : Höhe der Grafik in Pixeln
           &period=7200                          : Zeitraum in Sekunden der angezeigt werden soll, hier 2h
           &stime=20131015083000"                : Beginn den vorherigen Zeitraumes mit Datum + Uhrzeit
                                                   20131015083000
                                                   2013            Jahr
                                                       10          Monat
                                                         15        Tag
                                                           08      Stunde
                                                             30    Minute
                                                               00  Sekunde

Ausgabe: (von cURL)

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current 
                               Dload  Upload   Total   Spent    Left  Speed
 100 41903    0 41903    0     0   137k      0 --:--:-- --:--:-- --:--:--  137k

Und die Grafik die wir bekommen haben (Datei grafik.png):
ZabbixAPI-mit-cURL-001.png

Zu beachten ist: Wir haben zwar angegeben das die Grafik 900 x 300 Pixel sein groß soll - aber das ist nur die nackte Grafik ohne Beschriftung! Die Beschriftung kommt noch hinzu! Es gibt noch eine Menge Optionen zur Anzeige - die ich nach und nach ausklingele


5.2 Mögliche Parameter bei Grafiken


5.2.1 curtime

curtime=1381846910381                : keine Ahnung wofür, UNIX-Timestamp ist es NICHT




5.2.2 graphid

graphid=100100000000671              : ID der zu ladenen Grafik




5.2.3 height

height=300                           : Höhe der Grafik in Pixeln




5.2.4 period

period=7200                          : Zeitraum in Sekunden der angezeigt werden soll, hier 2h




5.2.5 profileIdx

profileIdx=web.screens               : ????




5.2.6 profileIdx2

profileIdx2=100100000000671          : ???? Wert scheint der gleiche wie graphid zu sein - aber wofür?




5.2.7 stime

stime=20131015083000"                : Beginn den vorherigen Zeitraumes mit Datum + Uhrzeit
                                                   20131015083000
                                                   2013            Jahr
                                                       10          Monat
                                                         15        Tag
                                                           08      Stunde
                                                             30    Minute
                                                               00  Sekunde




5.2.8 updateProfile

updateProfile=1                      : ???




5.2.9 width

width=900                            : Breite der Grafik in Pixeln




6 Vorhandene Grafiken gezielt löschen

Beim spielen mit den Grafiken hatte ich es geschafft - Ich hatte eine "herrenlose" Grafik produziert, ohne Hosts etc.
Man kommt nur noch über

Monitoring
--> Graph
    --> Group: all
    --> Host: all
    --> Name der Grafik

an diese heran - blöd.

Also löschen! Alles was wir dazu brauchen ist die GraphID, die finden wir im Link der Webseite:

https://10.111.0.60/zabbix/charts.php?sid=eb26d0f15aad0894&form_refresh=1&fullscreen=0&groupid=0&hostid=0&graphid=2002000000002148

Ihr seht schon, die letzen Stellen sind es.

Also, an der API Anmelden und dann mit

curl.exe -X POST 
         -H "Content-Type: application/json" 
         -d "{\"jsonrpc\":\"2.0\",\"method\":\"graph.delete\",\"params\":\"2002000000002148\"],\"auth\":\"ec7b42b81cf6d09b7db5a30d161dec49\",\"id\":1}"
         http://10.111.0.60/zabbix/api_jsonrpc.php

 curl.exe -X POST -H "Content-Type: application/json" -d "{\"jsonrpc\":\"2.0\",\"method\":\"graph.delete\",\"params\":\"2002000000002148\"],\"auth\":\"ec7b42b81cf6d09b7db5a30d161dec49\",\"id\":1}" http://10.111.0.60/zabbix/api_jsonrpc.php

löschen. Als Antwort gibt es:

{"jsonrpc":"2.0","result":{"graphids":["2002000000002148"]},"id":1}

die Graph-ID noch mal zurück.



7 Maps




7.1 Liste aller Maps abfragen

Listet alle vorhandenen Maps auf:

curl.exe -X POST 
         -H "Content-Type: application/json" 
         -d"{\"jsonrpc\":\"2.0\",\"method\":\"map.get\",\"params\":{\"output\":[\"name\"],\"sortfield\":\"name\"},\"auth\":\"05a7877f986da73f48d786a438a5b032\",
             \"id\":1}" http://10.106.207.105/api_jsonrpc.php

curl.exe -X POST -H "Content-Type: application/json" -d"{\"jsonrpc\":\"2.0\",\"method\":\"map.get\",\"params\":{\"output\":[\"name\"],\"sortfield\":\"name\"},\"auth\":\"05a7877f986da73f48d786a438a5b032\",\"id\":1}" http://10.106.207.105/api_jsonrpc.php


Ausgabe:

{
   "jsonrpc": "2.0",
   "result": [
       {
           "sysmapid": "100100000000007",
           "name": "Albert Leymann Baustoffe GmbH"
       },
       {
           "sysmapid": "100100000000004",
           "name": "DGHB"
       },
       {
           "sysmapid": "100100000000008",
           "name": "DGHB Gesamt"
       },
       {
           "sysmapid": "100100000000005",
           "name": "Hochschule für Künste Bremen"
       },
       {
           "sysmapid": "100100000000006",
           "name": "Intax Fahrzeugbau"
       },
       {
           "sysmapid": "100100000000001",
           "name": "Local network"
       },
       {
           "sysmapid": "100100000000009",
           "name": "Test Linz"
       },
       {
           "sysmapid": "100100000000002",
           "name": "Test Map DG HRO"
       },
       {
           "sysmapid": "100100000000003",
           "name": "Vermessungsbüro Stechert"
       }
   ],
   "id": 1
}




7.2 Maps Downloaden

Zuerst müsst ihr euch wie hier beschrieben an der Weboberfläche anmelden (nicht an der API): An_Zabbix_Webseite_mit_cURL_anmelden

Wie haben mit der Abfrage zuvor ja gezielt die ID's der Grafiken ermittelt, z.B.

"sysmapid": "100100000000001",
"name": "Local network"

Diese sysmapid benötigen wir für den Download:

curl.exe --cookie tmpjar -o map1.png --remote-name "http://10.106.207.105/map.php?sysmapid=100100000000001&severity_min=1"
 
         --cookie tmpjar                         : Den zuvor erstellten (bei der Anmeldung) Cookie verwenden 
         -o map1.png                             : Unter diesem Namen wird die Grafik gespeichert (Pfadangaben erlaubt)
         --remote-name                           : Webseite von der wir herunterladen wollen (-O wäre auch ok gewesen)
           "http://10.106.207.105/map.php?       : URL von Zabbix, statt login.php hier die map.php
           sysmapid=100100000000001              : ID der Grafik angeben wie ermittelt
           &severity_min=1                       : Warnstufe der Meldungen,
                                                   Mögliche Werte:    0 - Not classified
                                                                      1 - Information
                                                                      2 - Warning
                                                                      3 - Average
                                                                      4 - High
                                                                      5 - Disaster

Ich habe hier gerade die Standard-Map heruntergeladen die bei Zabbix immer dabei ist:
ZabbixAPI-mit-cURL-002.png


Im Gegensatz zu den anderen Grafiken wie z.B. ber die CPU Last können wir hier keine weiteren Angaben machen, also auch nicht die Größe/Abmessungen bestimmen.
Nur die Warnstufe lässt sich beinflussen.



8 Events abfragen




8.1 Liste aller Events einer Gruppe abfragen

Listet alle Events der Gruppe mit der Group-ID 2002000000000011 im Zeitraum 01.10.2013 00:00 bis 05.10.2013 00:00 auf:

curl.exe -X POST 
         -H "Content-Type: application/json" 
         -d"{\"jsonrpc\":\"2.0\",\"method\":\"event.get\",\"params\":{\"output\":\"extend\",
             \"time_from\":\"1380585600\",\"time_till\":\"1380931200\",\"sortfield\":\"eventid\",
             \"sortorder\": \"desc\",\"groupids\":\"2002000000000011\"},\"auth\":\"b940f4bd3fe2bfa41e8aacaee1c20a14\",\"id\":1}"
         http://10.111.0.60/zabbix/api_jsonrpc.php

curl.exe -k -X POST -H "Content-Type: application/json" -d"{\"jsonrpc\":\"2.0\",\"method\":\"event.get\",\"params\":{\"output\":\"extend\",\"time_from\":\"1380585600\",\"time_till\":\"1380931200\",\"sortfield\":\"eventid\",\"sortorder\": \"desc\",\"groupids\":\"2002000000000011\"},\"auth\":\"b940f4bd3fe2bfa41e8aacaee1c20a14\",\"id\":1}" https://10.111.0.60/zabbix/api_jsonrpc.php

Ausgabe:

{"jsonrpc":"2.0","result":[
    {"groupid":"2002000000000011",
         "eventid":"2002000000790785",
         "source":"0",
         "object":"0",
         "objectid":"2002000000015442",
         "clock":"1380870488",
         "value":"1",
         "acknowledged":"0",
         "ns":"778135634",
         "value_changed":"1"},
    {"groupid":"2002000000000011",
         "eventid":"2002000000790786",
         "source":"0",
         "object":"0",
         "objectid":"2002000000015823",
         "clock":"1380870512",
         "value":"1",
         "acknowledged":"0",
         "ns":"728222800",
         "value_changed":"1"},
    {"groupid":"2002000000000011",
         "eventid":"2002000000790787",
         "source":"0",
         "object":"0",
         "objectid":"2002000000013949",
         "clock":"1380870573",
         "value":"1",
         "acknowledged":"0",
         "ns":"823327962",
         "value_changed":"1"},
    {"groupid":"2002000000000011",
         "eventid":"2002000000790788",
         "source":"0",
         "object":"0",
         "objectid":"2002000000014905",
         "clock":"1380873642",
         "value":"2",
         "acknowledged":"0",
         "ns":"76816194",
         "value_changed":"0"},
    {"groupid":"2002000000000011",
         "eventid":"2002000000790789",
         "source":"0",
         "object":"0",
         "objectid":"2002000000014906",
         "clock":"1380873642",
         "value":"2",
         "acknowledged":"0",
         "ns":"76816194",
         "value_changed":"0"},
    {"groupid":"2002000000000011",
         "eventid":"2002000000790790",
         "source":"0",
         "object":"0",
         "objectid":"2002000000015823",
         "clock":"1380876182",
         "value":"0",
         "acknowledged":"0",
         "ns":"321560825",
         "value_changed":"1"},
    {"groupid":"2002000000000011",
         "eventid":"2002000000790791",
         "source":"0",
         "object":"0",
         "objectid":"2002000000013949",
         "clock":"1380876273",
         "value":"0",
         "acknowledged":"0",
         "ns":"610356699",
         "value_changed":"1"},
    {"groupid":"2002000000000011",
         "eventid":"2002000000790792",
         "source":"0",
         "object":"0",
         "objectid":"2002000000015442",
         "clock":"1380876825",
         "value":"0",
         "acknowledged":"0",
         "ns":"614342012",
         "value_changed":"1"},
    {"groupid":"2002000000000011",
         "eventid":"2002000000790793",
         "source":"0",
         "object":"0",
         "objectid":"2002000000015385",
         "clock":"1380878284",
         "value":"0",
         "acknowledged":"0",
         "ns":"571052717",
         "value_changed":"0"},
    {"groupid":"2002000000000011",
         "eventid":"2002000000790794",
         "source":"0",
         "object":"0",
         "objectid":"2002000000015386",
         "clock":"1380878284",
         "value":"0",
         "acknowledged":"0",
         "ns":"571052717",
         "value_changed":"0"},
    {"groupid":"2002000000000011",
         "eventid":"2002000035024994",
         "source":"0",
         "object":"0",
         "objectid":"2002000000014587",
         "clock":"1380889475",
         "value":"2",
         "acknowledged":"0",
         "ns":"0",
         "value_changed":"0"},
    {"groupid":"2002000000000011",
         "eventid":"2002000035025072",
         "source":"0",
         "object":"0",
         "objectid":"2002000000015387",
         "clock":"1380878328",
         "value":"2",
         "acknowledged":"0",
         "ns":"0",
         "value_changed":"0"}],
"id":1}




9 Alerts abfragen




9.1 Alle Alerts im Zeitraum X abfragen

Listet alle Alerts im Zeitraum 01.10.2013 00:00 bis 01.10.2013 08:00:00 auf:

curl.exe -X POST 
         -H "Content-Type: application/json" 
         -d"{\"jsonrpc\":\"2.0\",\"method\":\"alert.get\",\"params\":{\"output\":\"extend\",\"time_from\":\"1380585600\",
             \"time_till\":\"1380672000\",\"sortfield\":\"alertid\",\"sortorder\": \"desc\"},\"auth\":\"b940f4bd3fe2bfa41e8aacaee1c20a14\",\"id\":1}" 
         http://10.111.0.60/zabbix/api_jsonrpc.php

curl.exe -X POST -H "Content-Type: application/json" -d"{\"jsonrpc\":\"2.0\",\"method\":\"alert.get\",\"params\":{\"output\":\"extend\",\"time_from\":\"1380585600\",\"time_till\":\"1380672000\",\"sortfield\":\"alertid\",\"sortorder\": \"desc\"},\"auth\":\"b940f4bd3fe2bfa41e8aacaee1c20a14\",\"id\":1}" http://10.111.0.60/zabbix/api_jsonrpc.php

Ausgabe:

{"jsonrpc":"2.0","result":[
   {"users":[
       {"userid":"2002000000000003"}]
       "mediatypes":[
           {"mediatypeid":"2002000000000002"}]
       "alertid":"2000000000029835"
       "actionid":"2002000000000012"
       "eventid":"2002000000790767"
       "userid":"2002000000000003"
       "clock":"1380586662"
       "mediatypeid":"2002000000000002"
       "sendto":"xxx-xxx@xxxxxx.xxx.xx"
       "subject":""
       "message":"Disaster: XX-XX-VeeamBackup_XX-BACKUP: \"Used disk space in %\" (Low free disk space (<1%) on datastore VeeamBackup_XX-BACKUP) -  - 
                  Host: XX-XX-VeeamBackup_XX-BACKUP - IP:10.10.1.1 - Item: Used disk space in % - Trigger:Low free disk space (<1%) on datastore 
                  VeeamBackup_XX-BACKUP - Trigger status: PROBLEM - Trigger severity: Disaster - Trigger URL: - Event Time: 02:17:35 2013.10.01 -  
                  - Item values: -  - 1. Used disk space in % (XX-XX-VeeamBackup_XX-BACKUP): 99.12 % - 2. 
                  *UNKNOWN* (*UNKNOWN*): *UNKNOWN* - 3. *UNKNOWN* (*UNKNOWN*): *UNKNOWN*"
       "status":"2"
       "retries":"0"
       "error":"Media type disabled"
       "nextcheck":"0"
       "esc_step":"1"
       "alerttype":"0"}
   {"users":[
       {"userid":"2002000000000006"}]
       "mediatypes":[
           {"mediatypeid":"2002000000000001"}]
       "alertid":"2000000000029836"
       "actionid":"2002000000000005"
       "eventid":"2002000000790768"
       "userid":"2002000000000006"
       "clock":"1380595718"
       "mediatypeid":"2002000000000001"
       "sendto":"XXXXXXXXX-XXXXX@datagroup.de"
       "subject":"Recover: XX-XX-VeeamBackup_XX-BACKUP: \"Used disk space in %\" (Disaster: Low free disk space (<1%) on datastore VeeamBackup_XX-BACKUP)"
       "message":"Host: XX-XX-VeeamBackup_XX-BACKUP - IP: 10.10.1.1 - Item: Used disk space in % - Trigger:Low free disk space (<1%) on datastore 
                  VeeamBackup_XX-BACKUP - Trigger status: OK - Trigger severity: Disaster - Trigger URL: - Event Time: 04:48:35 2013.10.01 -  - 
                  Item values: -  - 1. Used disk space in % (XX-XX-VeeamBackup_XX-BACKUP): 98.28 % - 2. 
                  *UNKNOWN* (*UNKNOWN*): *UNKNOWN* - 3. *UNKNOWN* (*UNKNOWN*): *UNKNOWN*"
       "status":"1"
       "retries":"0"
       "error":""
       "nextcheck":"0"
       "esc_step":"0"
       "alerttype":"0"}
   {"users":[
       {"userid":"2002000000000004"}]
       "mediatypes":[
           {"mediatypeid":"2002000000000001"}]
       "alertid":"2000000000029837"
       "actionid":"2002000000000005"
       "eventid":"2002000000790768"
       "userid":"2002000000000004"
       "clock":"1380595718"
       "mediatypeid":"2002000000000001"
       "sendto":"XXX-XXXXXXX@datagroup.de"
       "subject":"Recover: XX-XX-VeeamBackup_XX-BACKUP: \"Used disk space in %\" (Disaster: Low free disk space (<1%) on datastore VeeamBackup_XX-BACKUP)"
       "message":"Host: XX-XX-VeeamBackup_XX-BACKUP - IP: 10.10.1.1 - Item: Used disk space in % - Trigger:Low free disk space (<1%) on datastore 
                  VeeamBackup_XX-BACKUP - Trigger status: OK - Trigger severity: Disaster - Trigger URL: - Event Time: 04:48:35 2013.10.01 -  - 
                  Item values: -  - 1. Used disk space in % (XX-XX-VeeamBackup_XX-BACKUP): 98.28 % - 2. 
                  *UNKNOWN* (*UNKNOWN*): *UNKNOWN* - 3. *UNKNOWN* (*UNKNOWN*): *UNKNOWN*"
       "status":"1"
       "retries":"0"
       "error":""
       "nextcheck":"0"
       "esc_step":"0"
       "alerttype":"0"}
   {"users":[
       {"userid":"2002000000000003"}]
       "mediatypes":[
           {"mediatypeid":"2002000000000002"}]
       "alertid":"2000000000029838"
       "actionid":"2002000000000012"
       "eventid":"2002000000790768"
       "userid":"2002000000000003"
       "clock":"1380595718"
       "mediatypeid":"2002000000000002"
       "sendto":"XXXX-XXXXX@XXXXXX.XXX.XX"
       "subject":""
       "message":"Recover: XX-XX-VeeamBackup_XX-BACKUP: \"Used disk space in %\" (Disaster: Low free disk space (<1%) on datastore VeeamBackup_XX-BACKUP) -  - 
                  Host: XX-XX-VeeamBackup_XX-BACKUP - IP: 10.10.1.1 - Item: Used disk space in % - Trigger:Low free disk space (<1%) on datastore VeeamBackup_
                  XX-BACKUP - Trigger status: OK - Trigger severity: Disaster - Trigger URL: - Event Time: 04:48:35 2013.10.01 -  - 
                  Item values: -  - 1. Used disk space in % (XX-XX-VeeamBackup_XX-BACKUP): 98.28 % - 2. 
                  *UNKNOWN* (*UNKNOWN*): *UNKNOWN* - 3. *UNKNOWN* (*UNKNOWN*): *UNKNOWN*"
       "status":"2"
       "retries":"0"
       "error":"Media type disabled"
       "nextcheck":"0"
       "esc_step":"0"
       "alerttype":"0"}]
"id":1}




9.2 Alle Alerts einer Gruppe im Zeitraum X abfragen

Vorweg: mit alert.get geht es schlichtweg nicht - schaut euch die Ausgabe beim vorherigen Beispiel an - da gibt es nirgends die Group-ID ... also kann man auch nicht danach filtern.
Aber man kann bei event.get den Parameter select_alerts mit angeben - dann bekommen wir zwar immer noch die ganze Liste mit allen Events, also auch die Events die keinen Alarm haben - aber ich habe sie schon mal und kann ja dann die Ausgabe extern filtern:

curl.exe -X POST 
         -H "Content-Type: application/json" 
         -d"{\"jsonrpc\":\"2.0\",\"method\":\"event.get\",\"params\":{\"output\":\"extend\",\"time_from\":\"1382313600\",
             \"time_till\":\"1382659200\",\"sortfield\":\"eventid\",\"sortorder\": \"desc\",\"select_alerts\":\"extend\",
             \"groupids\":\"2002000000000015\"},\"auth\":\"b940f4bd3fe2bfa41e8aacaee1c20a14\",\"id\":1}" 
         http://10.111.0.60/zabbix/api_jsonrpc.php

curl.exe -X POST -H "Content-Type: application/json" -d"{\"jsonrpc\":\"2.0\",\"method\":\"event.get\",\"params\":{\"output\":\"extend\",\"time_from\":\"1382313600\",\"time_till\":\"1382659200\",\"sortfield\":\"eventid\",\"sortorder\": \"desc\",\"select_alerts\":\"extend\",\"groupids\":\"2002000000000015\"},\"auth\":\"b940f4bd3fe2bfa41e8aacaee1c20a14\",\"id\":1}" http://10.111.0.60/zabbix/api_jsonrpc.php


In der nachfolgende (stark gekürzten) Ausgabe hat das erste Item keinen Alert ( "alerts":[] ), die beiden danach haben einen. In Wirklichkeit waren es ein hundert Items, hier auf 3 gekürzt.
Hier ist eine Tape-Library nicht mehr erreichbar - er meldet das mehrmals auch weil die Empfänger des Alarm nicht erreichbar sind (keine Mailadresse hinterlegt)
Da muss man den Kontext mit auswerten den ich hier habe versucht durch das einrücken darzustellen:


Ausgabe:

{"jsonrpc":"2.0","result":[
   {"alerts":[]
       "groupid":"2002000000000015",
       "eventid":"2002000037654862",
       "source":"0",
       "object":"0",
       "objectid":"2002000000014088",
       "clock":"1382337601",
       "value":"1",
       "acknowledged":"0",
       "ns":"474369269",
       "value_changed":"1"}
   {"alerts":[
       {"mediatypes":[]
           "users":[{"userid":"2002000000000010"}]
           "alertid":"2000000000037634",
           "actionid":"2002000000000005",
           "eventid":"2002000037654868",
           "userid":"2002000000000010",
           "clock":"1382407527",
           "mediatypeid":"0",
           "sendto":"",
           "subject":"Error: XX-XX2-TAPELIB: "Host status" (Host XX-XX2-TAPELIB (168.192.1.65) is down)",
           "message":"Host:             XX-XX2-TAPELIB
                      IP:               168.192.1.65
                      Item:             Host Status
                      Trigger:          Host XX-XX2-TAPELIB (168.192.1.65) is down
                      Trigger status:   PROBLEM
                      Trigger severity: Error
                      Trigger URL:      
                      Event Time:       04:05:20 2013.10.22
                      Item values:      1. Host status (XX-XX2-TAPELIB): Down/Unreachable (0)
                                        2. *UNKNOWN* (*UNKNOWN*): *UNKNOWN*
                                        3. *UNKNOWN* (*UNKNOWN*): *UNKNOWN*",
           "status":"2",
           "retries":"3",
           "error":"No media defined for user "apiuser apiuser (apiuser)\"",
           "nextcheck":"0",
           "esc_step":"1",
           "alerttype":"0"}
       {"mediatypes":[]
           "users":[{"userid":"2002000000000009"}]
           "alertid":"2000000000037635",
           "actionid":"2002000000000005",
           "eventid":"2002000037654868",
           "userid":"2002000000000009",
           "clock":"1382407527",
           "mediatypeid":"0",
           "sendto":"",
           "subject":"Error: XX-XX2-TAPELIB: "Host status" (Host XX-XX2-TAPELIB (168.192.1.65) is down)",
           "message":"Host:             XX-XX2-TAPELIB
                      IP:               168.192.1.65
                      Item:             Host Status
                      Trigger:          Host XX-XX2-TAPELIB (168.192.1.65) is down
                      Trigger status:   PROBLEM
                      Trigger severity: Error
                      Trigger URL:      
                      Event Time:       04:05:20 2013.10.22
                      Item values:      1. Host status (XX-XX2-TAPELIB): Down/Unreachable (0)
                                        2. *UNKNOWN* (*UNKNOWN*): *UNKNOWN*
                                        3. *UNKNOWN* (*UNKNOWN*): *UNKNOWN*",
           "status":"2",
           "retries":"3",
           "error":"No media defined for user \"Bernhard Linz (b.linz)\"",
           "nextcheck":"0",
           "esc_step":"1",
           "alerttype":"0"}
   {"mediatypes":[]
       "users":[{"userid":"2002000000000008"}]
           "alertid":"2000000000037636",
           "actionid":"2002000000000005",
           "eventid":"2002000037654868",
           "userid":"2002000000000008",
           "clock":"1382407527",
           "mediatypeid":"0",
           "sendto":"",
           "subject":"Error: XX-XX2-TAPELIB: "Host status" (Host XX-XX2-TAPELIB (168.192.1.65) is down)",
           "message":"Host:             XX-XX2-TAPELIB
                      IP:               168.192.1.65
                      Item:             Host Status
                      Trigger:          Host XX-XX2-TAPELIB (168.192.1.65) is down
                      Trigger status:   PROBLEM
                      Trigger severity: Error
                      Trigger URL:      
                      Event Time:       04:05:20 2013.10.22
                      Item values:      1. Host status (XX-XX2-TAPELIB): Down/Unreachable (0)
                                        2. *UNKNOWN* (*UNKNOWN*): *UNKNOWN*
                                        3. *UNKNOWN* (*UNKNOWN*): *UNKNOWN*",
           "status":"2",
           "retries":"3",
           "error":"No media defined for user "xxxxxx xxxxxxx (x.xxxxxxxx)"",
           "nextcheck":"0",
           "esc_step":"1",
           "alerttype":"0"}
       {"mediatypes":[]
           "users":[{"userid":"2002000000000007"}]
           "alertid":"2000000000037637",
           "actionid":"2002000000000005",
           "eventid":"2002000037654868",
           "userid":"2002000000000007",
           "clock":"1382407527",
           "mediatypeid":"0",
           "sendto":"",
           "subject":"Error: XX-XX2-TAPELIB: \"Host status\" (Host XX-XX2-TAPELIB (168.192.1.65) is down)",
           "message":"Host:             XX-XX2-TAPELIB
                      IP:               168.192.1.65
                      Item:             Host Status
                      Trigger:          Host XX-XX2-TAPELIB (168.192.1.65) is down
                      Trigger status:   PROBLEM
                      Trigger severity: Error
                      Trigger URL:      
                      Event Time:       04:05:20 2013.10.22
                      Item values:      1. Host status (XX-XX2-TAPELIB): Down/Unreachable (0)
                                        2. *UNKNOWN* (*UNKNOWN*): *UNKNOWN*
                                        3. *UNKNOWN* (*UNKNOWN*): *UNKNOWN*",
           "status":"2",
           "retries":"3",
           "error":"No media defined for user "Reporting XXXXX XXXXX (XXXX-XXXX)"",
           "nextcheck":"0",
           "esc_step":"1",
           "alerttype":"0"}
       {"mediatypes":[
           {"mediatypeid":"2002000000000001",
               "type":"0",
               "description":"Email",
               "smtp_server":"127.0.0.1",
               "smtp_helo":"XXXXX-XXX-XX.XXX-XXX.XX",
               "smtp_email":"zabbix@XXXXX.XX-XX.XX",
               "exec_path":"",
               "gsm_modem":"",
               "username":"",
               "passwd":"",
               "status":"0"}]
           "users":[
               {"userid":"2002000000000006"}]
                   "alertid":"2000000000037638",
                   "actionid":"2002000000000005",
                   "eventid":"2002000037654868",
                   "userid":"2002000000000006",
                   "clock":"1382407527",
                   "mediatypeid":"2002000000000001",
                   "sendto":"xxxxxxxxxx-xxxxxxxxx@xxxxxxxxxx.xx",
                   "subject":"Error: XX-XX2-TAPELIB: "Host status" (Host XX-XX2-TAPELIB (168.192.1.65) is down)",
                   "message":"Host:             XX-XX2-TAPELIB
                              IP:               168.192.1.65
                              Item:             Host Status
                              Trigger:          Host XX-XX2-TAPELIB (168.192.1.65) is down
                              Trigger status:   PROBLEM
                              Trigger severity: Error
                              Trigger URL:      
                              Event Time:       04:05:20 2013.10.22
                              Item values:      1. Host status (XX-XX2-TAPELIB): Down/Unreachable (0)
                                                2. *UNKNOWN* (*UNKNOWN*): *UNKNOWN*
                                                3. *UNKNOWN* (*UNKNOWN*): *UNKNOWN*",
                   "status":"1",
                   "retries":"0",
                   "error":"",
                   "nextcheck":"0",
                   "esc_step":"1",
                   "alerttype":"0"}
       {"mediatypes":[]
           "users":[
               {"userid":"2002000000000005"}]
                   "alertid":"2000000000037639",
                   "actionid":"2002000000000005",
                   "eventid":"2002000037654868",
                   "userid":"2002000000000005",
                   "clock":"1382407527",
                   "mediatypeid":"0",
                   "sendto":"",
                   "subject":"Error: XX-XX2-TAPELIB: "Host status" (Host XX-XX2-TAPELIB (168.192.1.65) is down)",
                   "message":"Host:             XX-XX2-TAPELIB
                              IP:               168.192.1.65
                              Item:             Host Status
                              Trigger:          Host XX-XX2-TAPELIB (168.192.1.65) is down
                              Trigger status:   PROBLEM
                              Trigger severity: Error
                              Trigger URL:      Event Time:       04:05:20 2013.10.22
                              Item values:      1. Host status (XX-XX2-TAPELIB): Down/Unreachable (0)
                                                2. *UNKNOWN* (*UNKNOWN*): *UNKNOWN*
                                                3. *UNKNOWN* (*UNKNOWN*): *UNKNOWN*",
                   "status":"2",
                   "retries":"3",
                   "error":"No media defined for user \"XXX XXXXXX (XXX XXXXXXXX)\"",
                   "nextcheck":"0",
                   "esc_step":"1",
                   "alerttype":"0"}
       {"mediatypes":[
           {"mediatypeid":"2002000000000001",
               "type":"0",
               "description":"Email",
               "smtp_server":"127.0.0.1",
               "smtp_helo":"XXXX-XXX-XX.XXXXXXXXX-XXXXXX.XX",
               "smtp_email":"zabbix@XXXXX.XXXXXX-XXXXXX.XX",
               "exec_path":"",
               "gsm_modem":"",
               "username":"",
               "passwd":"",
               "status":"0"}]
               "users":[{"userid":"2002000000000004"}]
               "alertid":"2000000000037640",
               "actionid":"2002000000000005",
               "eventid":"2002000037654868",
               "userid":"2002000000000004",
               "clock":"1382407527",
               "mediatypeid":"2002000000000001",
               "sendto":"XXX-XXXXXXX@xxxxxxxxxxx.xx",
               "subject":"Error: XX-XX2-TAPELIB: \"Host status\" (Host XX-XX2-TAPELIB (168.192.1.65) is down)",
               "message":"Host:             XX-XX2-TAPELIB
                          IP:               168.192.1.65
                          Item:             Host Status
                          Trigger:          Host XX-XX2-TAPELIB (168.192.1.65) is down
                          Trigger status:   PROBLEM
                          Trigger severity: Error
                          Trigger URL:      
                          Event Time:       04:05:20 2013.10.22
                          Item values:      1. Host status (XX-XX2-TAPELIB): Down/Unreachable (0)
                                            2. *UNKNOWN* (*UNKNOWN*): *UNKNOWN*
                                            3. *UNKNOWN* (*UNKNOWN*): *UNKNOWN*",
               "status":"1",
               "retries":"0",
               "error":"",
               "nextcheck":"0",
               "esc_step":"1",
               "alerttype":"0"}
       {"mediatypes":[]
           "users":[
               {"userid":"2002000000000003"}]
               "alertid":"2000000000037641",
               "actionid":"2002000000000005",
               "eventid":"2002000037654868",
               "userid":"2002000000000003",
               "clock":"1382407527",
               "mediatypeid":"0",
               "sendto":"",
               "subject":"Error: XX-XX2-TAPELIB: \"Host status\" (Host XX-XX2-TAPELIB (168.192.1.65) is down)",
               "message":"Host:             XX-XX2-TAPELIB
                          IP:               168.192.1.65
                          Item:             Host Status
                          Trigger:          Host XX-XX2-TAPELIB (168.192.1.65) is down
                          Trigger status:   PROBLEM
                          Trigger severity: Error
                          Trigger URL:      
                          Event Time:       04:05:20 2013.10.22
                          Item values:      1. Host status (XX-XX2-TAPELIB): Down/Unreachable (0)
                                            2. *UNKNOWN* (*UNKNOWN*): *UNKNOWN*
                                            3. *UNKNOWN* (*UNKNOWN*): *UNKNOWN*",
               "status":"2",
               "retries":"3",
               "error":"No media defined for user "xxxxxx xxxxxxx (x.xxxxxxx)\"",
               "nextcheck":"0",
               "esc_step":"1",
               "alerttype":"0"}
       {"mediatypes":[]
            "users":[
               {"userid":"2002000000000010"}]
               "alertid":"2000000000037642",
               "actionid":"2002000000000012",
               "eventid":"2002000037654868",
               "userid":"2002000000000010",
               "clock":"1382407527",
               "mediatypeid":"0",
               "sendto":"",
               "subject":"",
               "message":"Error: XX-XX2-TAPELIB: "Host status" (Host XX-XX2-TAPELIB (168.192.1.65) is down)
                          Host:             XX-XX2-TAPELIB
                          IP:               168.192.1.65
                          Item:             Host status
                          Trigger:          Host XX-XX2-TAPELIB (168.192.1.65) is down
                          Trigger status:   PROBLEM
                          Trigger severity: Error
                          Trigger URL:      
                          Event Time:       04:05:20 2013.10.22
                          Item values:      1. Host status (XX-XX2-TAPELIB): Down\/Unreachable (0)
                                            2. *UNKNOWN* (*UNKNOWN*): *UNKNOWN*
                                            3. *UNKNOWN* (*UNKNOWN*): *UNKNOWN*",
               "status":"2",
               "retries":"3",
               "error":"No media defined for user "xxxxx xxxxxx (xxxxxxx)\"",
               "nextcheck":"0",
               "esc_step":"1",
               "alerttype":"0"}
...
...
"id":1}