đŸ Archived View for bwog-notes.chagratt.site âș 2022 âș interroger-lapi-zabbix-avec-curl âș index.gmi captured on 2024-05-26 at 14:43:48. Gemini links have been rewritten to link to archived content
âŹ ïž Previous capture (2024-05-10)
âĄïž Next capture (2024-06-16)
-=-=-=-=-=-=-
RĂ©digĂ© le 8 mars 2022 - modifiĂ© le 8 fĂ©vrier 2024. Ătiquettes : curl zabbix
L'API Zabbix peut-ĂȘtre un bon moyen d'interagir avec son instance.
Pour cela, il y a moult outils permettant de s'en servir.
Mais, si vous n'avez qu'un Lignux sous la main et que vous voulez faire une requĂȘte basique,
pas de panique, il vous reste un atout.
Ce joker, c'est la commande curl.
C'est bien connu, curl fait tout, et mĂȘme plus (sauf le cafĂ©, encore que ...).
Tout ce dont on a besoin ici sera : un shell avec curl, un lien réseau avec l'instance Zabbix,
des identifiants fonctionnels sur cette instance.
Ce qui est important ici, plus que le contenu des requĂȘtes qu'on passera avec l'option -d (et qui sont dispos sur la documentation),
c'est de passer le bon en-tĂȘte, et de spĂ©cifier la mĂ©thode POST.
Les options -H et -X vont nous y aider.
Voici Ă quoi ressembleront nos appels API :
curl -i -H "Content-Type: application/json-rpc" -X POST \ -d 'Le json de requĂȘte' \ http://url_instance_zabbix/api_jsonrpc.php
_Remarque_ : -i sert Ă afficher en sortie de commande les en-tĂȘtes de rĂ©ponse HTTP.
Pratique quand on teste la connexion ou de petites requĂȘtes, mais fortement inutile si on veut ensuite traiter le json qu'on recevra.
Tout d'abord, envoyer utilisateur et mot de passe pour récupérer un jeton :
curl -i -H "Content-Type: application/json-rpc" -X POST \ -d '{ "jsonrpc": "2.0", "method": "user.login", "params": { "username": "login", "password": "mot de passe" }, "id": 1, "auth": null }' \ http://url_instance_zabbix/api_jsonrpc.php
L'API va répondre avec un jeton dans le champ result, qu'on pourra dÚs lors réutiliser :
{ "jsonrpc": "2.0", "result": "0424bd59b807674191e7d77572075f33", "id": 1 }
_Ă partir de la version 5.4_
Depuis votre compte, sur l'interface ouaibe, allez dans « User settings » puis « API tokens ».
De lĂ vous pourrez gĂ©nĂ©rer un ou plusieurs jetons qui seront utilisables par la suite dans le champ auth des requĂȘtes.
Maintenant que l'on a un jeton en poche, y'a plus qu'Ă ,
en le mettant dans le champ auth qu'on avait laissé à null avant.
Ici un exemple qui permet de lister les hĂŽtes et leurs templates :
curl -H "Content-Type: application/json-rpc" -X POST \ -d '{ "jsonrpc": "2.0", "method": "host.get", "params": { "output": ["host","name","hostid"], "selectParentTemplates": [ "templateid", "name" ] }, "id": 1, "auth": "0424bd59b807674191e7d77572075f33" ' \ http://url_instance_zabbix/api_jsonrpc.php
Si jamais on veut scripter des appels avec variables, toujours en mode outillage minimal,
il faudra faire attention Ă l'extrapolation des chaines et des variables.
Attention, ça va ĂȘtre sale !
while read hstgrp do curl -H "Content-Type: application/json-rpc" -X POST \ -d "{ \"jsonrpc\": \"2.0\", \"method\": \"hostgroup.create\", \"params\": { \"name\":\"${hstgrp}\" }, \"id\": 1, \"auth\": \"0424bd59b807674191e7d77572075f33\" " \ http://url_instance_zabbix/api_jsonrpc.php sleep 1 done < hosts_groups.txt
Pour faire bien plus propre, on peut passer par un Heredoc.
Il y aura toutefois un petit changement dans l'ordre des arguments envoyés à curl :
while read hstgrp do curl -H "Content-Type: application/json-rpc" -X POST http://url_instance_zabbix/api_jsonrpc.php \ -d @- <<- EOF { "jsonrpc": "2.0", "method": "hostgroup.create", "params": { "name":"${hstgrp}" }, "id": 1, "auth": "0424bd59b807674191e7d77572075f33" } EOF sleep 1 done < hosts_groups.txt
le json envoyé était considéré comme invalide en faisant une indentation avec des espaces.
Dans l'exemple ci-dessus, l'indentation est faite avec des tabulations.
Je vous renvoie vers
pour plus de détails si vous le souhaitez.
Sinon, si ça ne vous dérange pas, l'exemple suivant est tout aussi valide, bien que moins lisible :
while read hstgrp do curl -H "Content-Type: application/json-rpc" -X POST http://url_instance_zabbix/api_jsonrpc.php \ -d @- << EOF { "jsonrpc": "2.0", "method": "hostgroup.create", "params": { "name":"${hstgrp}" }, "id": 1, "auth": "0424bd59b807674191e7d77572075f33" } EOF sleep 1 done < hosts_groups.txt
Notez bien que l'opérateur de redirection perd son caractÚre - juste aprÚs l'ouverture du Heredoc dans ce cas.
Ăvidemment, avec un vĂ©ritable outil ou langage plus adaptĂ©, la vie sera plus facile et les scripts beaucoup plus propres et robustes.
Par exemple en python il y a la bibliothĂšque PyZabbix,
ou bien les utilitaires python publiés par Zabbix.
Mais, pour dépanner ou des interrogations ponctuelles de l'API, c'est toujours bon à savoir.
La documentation API de Zabbix
Article du blog Zabbix sur leur bibliothĂšque python
Les sources de la bibliothĂšque Python Zabbix
-------------------------------
â Plus rĂ©cent : Stargazer, un server Gemini sur Alpine
â Plus ancien : Ma PineTime, Gadgetbridge et la musique sur android
Aléatoire : Applis alternatives pour Android
Contenu sous licence CC-BY-SA