Ich habe den Code geschrieben, um den Verlauf von Elementen auf dem Zabbix-Server in Java aufzunehmen und anzuzeigen. Dieses Mal habe ich beschlossen, die Geschichte der Ortszeit zu extrahieren, die am einfachsten zu verstehen ist.
https://github.com/hengyunabc/zabbix-api Elemente zum Debuggen
Stellen Sie eine Verbindung zur API her, um die Version anzuzeigen.
Main.java
DefaultZabbixApi ZabbixAPI = new DefaultZabbixApi("http://[Host-IP]/zabbix/api_jsonrpc.php");
ZabbixAPI.init();//Initialisieren
System.out.println(ZabbixAPI.apiVersion());//Versionsanzeige
Dann melden Sie sich an.
Main.java
boolean login = ZabbixAPI.login("name", "password");
System.err.println("login:" + login);
Wenn die Anmeldung erfolgreich ist, wird login: true angezeigt. Von hier aus können Sie die Funktionen der Zabbix-API nutzen.
Rufen Sie vor dem Abrufen des Verlaufs die Element-ID mit item.get ab.
Main.java
//Anfrage
JSONObject filter = new JSONObject();
filter.put("key_", new String[]{"system.localtime"});//Artikelschlüssel
filter.put("name", new String[]{"myitem"});//Artikelname
Request getRequest = RequestBuilder.newBuilder().method("item.get").paramEntry("filter", filter).build();
//Antwort
JSONObject getResponse = ZabbixAPI.call(getRequest);
String itemid = getResponse.getJSONArray("result").getJSONObject(0).getString("itemid");
String name = getResponse.getJSONArray("result").getJSONObject(0).getString("name");
Der Name des Elements ist auch in der Antwort enthalten, um zu bestätigen, dass die richtigen Daten erhalten wurden.
Als nächstes erhalten Sie die Geschichte.
Main.java
Date date = new Date();
Timestamp now = new Timestamp(date.getTime()/1000L);//time_In bis durch Unix-Zeitstempel angeben
//iteids:Itemid-Spezifikationsverlauf:Geben Sie das Sortierfeld für den Datentyp an:Geben Sie den Sortierer für Sortierkriterien an:Aufsteigende oder absteigende Zeit_till:Daten bis zur angegebenen Zeit anzeigen
getRequest = RequestBuilder.newBuilder().method("history.get")
.paramEntry("itemids", itemid).paramEntry("history", 3)
.paramEntry("sortfield", "clock").paramEntry("sortorder", "DESC")
.paramEntry("time_till", now).build();
getResponse = ZabbixAPI.call(getRequest);
for(int i = 0;i < getResponse.getJSONArray("result").size();i++) {
String history = getResponse.getJSONArray("result").getJSONObject(i).getString("value");//Sie können es mit Int-Typ nehmen
System.out.println(new Timestamp(Integer.parseInt(history) * 1000L));//Konvertieren Sie den Unix-Zeitstempel in den Java-Zeitstempel
}
Ganzer Code
Main.java
public class Main {
public void start() {
DefaultZabbixApi ZabbixAPI = new DefaultZabbixApi("http://[Host-IP]/zabbix/api_jsonrpc.php");
ZabbixAPI.init();
System.out.println(ZabbixAPI.apiVersion());
boolean login = ZabbixAPI.login("name", "password");
System.err.println("login:" + login);
JSONObject filter = new JSONObject();
filter.put("key_", new String[]{"system.localtime"});
filter.put("name", new String[]{"myitem"});
Request getRequest = RequestBuilder.newBuilder().method("item.get").paramEntry("filter", filter).build();
JSONObject getResponse = ZabbixAPI.call(getRequest);
String itemid = getResponse.getJSONArray("result").getJSONObject(0).getString("itemid");
String name = getResponse.getJSONArray("result").getJSONObject(0).getString("name");
Date date = new Date();
Timestamp now = new Timestamp(date.getTime()/1000L);//time_In bis durch Unix-Zeitstempel angeben
getRequest = RequestBuilder.newBuilder().method("history.get")
.paramEntry("itemids", itemid).paramEntry("history", 3)
.paramEntry("sortfield", "clock").paramEntry("sortorder", "DESC")
.paramEntry("time_till", now).build();
getResponse = ZabbixAPI.call(getRequest);
for(int i = 0;i < getResponse.getJSONArray("result").size();i++) {
String history = getResponse.getJSONArray("result").getJSONObject(i).getString("value");
long time = getResponse.getJSONArray("result").getJSONObject(i).getLong("clock");
System.out.println(new Timestamp(Integer.parseInt(history) * 1000L));//Konvertieren Sie den Unix-Zeitstempel in den Java-Zeitstempel
}
}
public static void main(String[] args) {
Main m = new Main();
m.start();
}
}
Zuerst habe ich es in der Sprache Go geschrieben, um zu verstehen, wie die API verwendet wird und wie es funktioniert, und dann in Java geschrieben, aber da das JSON-Protokoll festgelegt wurde, musste der Code selbst nicht so lang sein. Ich werde dies ab dem Punkt schreiben, an dem JSON mit httpclient ausgelöst wird.
https://www.zabbix.com/documentation/2.2/manual/api Eine Liste der API-Funktionen finden Sie hier. Wenn Sie also andere Funktionen verwenden möchten, lesen Sie bitte diese.
Recommended Posts