J'ai écrit le code pour prendre et afficher l'historique des éléments sur le serveur Zabbix en Java. Cette fois, j'ai décidé de sortir l'histoire de l'heure locale, qui est la plus simple à comprendre.
https://github.com/hengyunabc/zabbix-api Éléments pour le débogage
Connectez-vous à l'API pour afficher la version.
Main.java
DefaultZabbixApi ZabbixAPI = new DefaultZabbixApi("http://[IP hôte]/zabbix/api_jsonrpc.php");
ZabbixAPI.init();//Initialisation
System.out.println(ZabbixAPI.apiVersion());//Affichage de la version
Puis connectez-vous.
Main.java
boolean login = ZabbixAPI.login("name", "password");
System.err.println("login:" + login);
Si la connexion réussit, login: true s'affiche. De là, vous pouvez utiliser les fonctionnalités de l'API Zabbix.
Avant de récupérer l'historique, récupérez l'ID d'élément avec item.get.
Main.java
//demande
JSONObject filter = new JSONObject();
filter.put("key_", new String[]{"system.localtime"});//Clé d'article
filter.put("name", new String[]{"myitem"});//Nom de l'article
Request getRequest = RequestBuilder.newBuilder().method("item.get").paramEntry("filter", filter).build();
//réponse
JSONObject getResponse = ZabbixAPI.call(getRequest);
String itemid = getResponse.getJSONArray("result").getJSONObject(0).getString("itemid");
String name = getResponse.getJSONArray("result").getJSONObject(0).getString("name");
Le nom de l'élément est également inclus dans la réponse pour confirmer que les données correctes ont été obtenues.
Ensuite, récupérez l'historique.
Main.java
Date date = new Date();
Timestamp now = new Timestamp(date.getTime()/1000L);//time_En caisse, spécifiez par horodatage Unix
//iteids:historique des spécifications d'item:Spécifier le champ de tri du type de données:Spécifier le trieur de critères de tri:Temps croissant ou décroissant_till:Afficher les données jusqu'à l'heure spécifiée
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");//Vous pouvez le prendre avec le type Int
System.out.println(new Timestamp(Integer.parseInt(history) * 1000L));//Convertir l'horodatage Unix en horodatage Java
}
Code entier
Main.java
public class Main {
public void start() {
DefaultZabbixApi ZabbixAPI = new DefaultZabbixApi("http://[IP hôte]/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_En caisse, spécifiez par horodatage Unix
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));//Convertir l'horodatage Unix en horodatage Java
}
}
public static void main(String[] args) {
Main m = new Main();
m.start();
}
}
Tout d'abord, je l'ai écrit en langage Go pour comprendre comment utiliser l'API et son fonctionnement, puis je l'ai écrit en Java, mais comme le protocole JSON a été décidé, le code lui-même n'a pas dû être aussi long. J'écrirai ceci à partir du point de lancer JSON avec httpclient.
https://www.zabbix.com/documentation/2.2/manual/api Une liste de fonctions API est répertoriée ici, donc si vous souhaitez utiliser d'autres fonctions, veuillez vous y référer.