L'API de Áú»¢¶Ä²© us permet recuperar i modificar la configuraci¨® de Áú»¢¶Ä²© amb programaci¨® i proporciona acc¨¦s a dades hist¨°riques. S'utilitza molt per a:
L'API Áú»¢¶Ä²© ¨¦s una API HTTP, inclosa a la interf¨ªcie web. Empra el protocol JSON-RPC 2.0, que vol dir dues coses:
Trobareu m¨¦s informaci¨® sobre el protocol i JSON a l' i a la .
L'API consta d'una s¨¨rie de m¨¨todes que s'agrupen en API separades. Cadascun dels m¨¨todes realitza una tasca espec¨ªfica. Per exemple, el m¨¨tode 'host.create' pertany a l'API Equip i s'empra per crear nous equips. ±á¾±²õ³Ù¨°°ù¾±³¦ament, les API de vegades s'anomenen "classes".
La majoria de les API contenen almenys quatre m¨¨todes: get
, create
, update
i `delete' per recuperar, crear, actualitzar i esborrar dades respectivament, per¨° algunes API poden proporcionar un conjunt de m¨¨todes molt diferent.
Un cop hagueu configurat la interf¨ªcie web, podeu fer peticions HTTP remotes per cridar a l'API. Per fer-ho, heu d'enviar peticions HTTP POST al fitxer api_jsonrpc.php
situat al directori de la interf¨ªcie. Per exemple, si la vostra interf¨ªcie Áú»¢¶Ä²© ¨¦s instal¡¤lada a http://example.com/zabbix
, la petici¨® HTTP per cridar al m¨¨tode apiinfo.version
pot assemblar-se a:
curl --request POST \
--url 'http://example.com/zabbix/api_jsonrpc.php'
--header 'Content-Type: application/json-rpc'
--data '{"jsonrpc":"2.0","method":"apiinfo.version","params":{},"id":1}'
La petici¨® ha de tindre la cap?alera Content-Type
establerta en un d'aquests valors: application/json-rpc
, application/json
o ²¹±è±ô¾±³¦²¹³¦¾±¨®/Âá²õ´Ç²Ô°ù±ð±ç³Ü±ð²õ³Ù
.
L'objecte de petici¨® cont¨¦ les propietats seg¨¹ents:
-jsonrpc
- la versi¨® del protocol JSON-RPC emprada per l'API (l'API Áú»¢¶Ä²© implementa JSON-RPC versi¨® 2.0); -method
- el m¨¨tode de l'API que s'est¨¤ cridant; -params
- els par¨¤metres que es passaran al m¨¨tode API; -id
- un identificador arbitrari de la petici¨®.
Si la petici¨® ¨¦s correcta, la resposta retornada per l'API hauria de ser aix¨ª:
L'objecte de resposta cont¨¦ les propietats seg¨¹ents:
-jsonrpc
- la versi¨® del protocol JSON-RPC; -result
- les dades retornades pel m¨¨tode; -id
- un identificador de la petici¨® corresponent.
La secci¨® seg¨¹ent us guiar¨¤ per alguns exemples d'¨²s amb m¨¦s detall.
Per accedir a dades de Áú»¢¶Ä²©, heu de:
Per exemple, si voleu obtindre un token d'autenticaci¨® nou iniciant la sessi¨® com a usuari Admin est¨¤ndard, la petici¨® JSON seria aix¨ª:
curl --request POST \
--url 'https://example.com/zabbix/api_jsonrpc.php' \
--header 'Content-Type: application/json-rpc' \
--data '{"jsonrpc":"2.0","method":"user.login","params":{"username":"Admin","password":"zabbix"},"id":1}'
Si proporcioneu les credencials correctes, la resposta de l'API contindr¨¤ el token d'autenticaci¨® de l'usuari:
Totes les peticions d'API requereixen una autenticaci¨® o un testimoni d'API. Podeu proporcionar les credencials emprant la cap?alera de petici¨® ´¡³Ü³Ù´Ç°ù¾±³Ù³ú²¹³¦¾±¨®:
curl --request POST \
--url 'https://example.com/zabbix/api_jsonrpc.php' \
--header 'Authorization: Bearer 0424bd59b807674191e7d77572075f33'
Si empreu Apache, potser haureu de canviar la configuraci¨® predeterminada d'Apache a /etc/apache2/apache2.conf
afegint la l¨ªnia seg¨¹ent:
En cas contrari, ¨¦s possible que Apache no envi? la cap?alera ´¡³Ü³Ù´Ç°ù¾±³Ù³ú²¹³¦¾±¨® a la petici¨®.
Des de Áú»¢¶Ä²© 7.2.1, la cap?alera ´¡³Ü³Ù´Ç°ù¾±³Ù³ú²¹³¦¾±¨® ¨¦s compatible amb les peticions d'origen creuat (). Des de Áú»¢¶Ä²© 7.2.5, l'API de Áú»¢¶Ä²© admet cap?aleres sense de maj¨²scules i min¨²scules (com ara ²¹³Ü³Ù´Ç°ù¾±³Ù³ú²¹³¦¾±¨®
, ´¡³Ü³Ù´Ç°ù¾±³Ù³ú²¹³¦¾±¨®
i AUTORITZACI?
es tracten per igual).
Una cookie "zbx_session" s'empra per autoritzar una petici¨® d'API des de la interf¨ªcie d'usuari de Áú»¢¶Ä²© feta amb JavaScript (des d'un m¨°dul o giny personalitzat).
Ara tenim un token d'autenticaci¨® d'usuari v¨¤lid que es pot emprar per accedir a les dades a Áú»¢¶Ä²©. Per exemple, emprem el m¨¨tode host.get per recuperar els ID, els noms d'equips i les interf¨ªcies de tots els equips:
±Ê±ð³Ù¾±³¦¾±¨®:
curl --request POST \
--url 'https://example.com/zabbix/api_jsonrpc.php' \
--header 'Authorization: Bearer ${AUTHORIZATION_TOKEN}' \
--header 'Content-Type: application/json-rpc' \
--data @data.json
data.json
¨¦s un arxiu que cont¨¦ una consulta JSON. Enlloc d'un arxiu, podeu passar la consulta al camp d'arguments --data
.
data.json
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": [
"hostid",
"host"
],
"selectInterfaces": [
"interfaceid",
"ip"
]
},
"id": 2
}
L'objecte de resposta contindr¨¤ les dades demanades sobre els equips:
{
"jsonrpc": "2.0",
"result": [
{
"hostid": "10084",
"host": "Áú»¢¶Ä²© server",
"interfaces": [
{
"interfaceid": "1",
"ip": "127.0.0.1"
}
]
}
],
"id": 2
}
Per raons de rendiment, us recomanem que enumereu sempre les propietats de l'objecte que voleu recuperar i eviteu recuperar-ho tot.
Creem un nou element a l'equip "Servidor Áú»¢¶Ä²©" emprant les dades que vam obtindre de la petici¨® host.get
anterior. Aix¨° es pot fer mitjan?ant el m¨¨tode item.create:
curl --request POST \
--url 'https://example.com/zabbix/api_jsonrpc.php' \
--header 'Authorization: Bearer ${AUTHORIZATION_TOKEN}' \
--header 'Content-Type: application/json-rpc' \
--data '{"jsonrpc":"2.0","method":"item.create","params":{"name":"Free disk space on /home/joe/","key_":"vfs.fs.size[/home/joe/,free]","hostid":"10084","type":0,"value_type":3,"interfaceid":"1","delay":30},"id":3}'
Una resposta correcta contindr¨¤ l'ID de l'element que s'acaba de crear, que es pot emprar per fer refer¨¨ncia a l'element en peticions posteriors:
El m¨¨tode item.create
i altres m¨¨todes de creaci¨® tamb¨¦ poden admetre matrius d'objectes i crear diversos elements amb una ¨²nica crida a l'API.
Si els m¨¨todes de creaci¨® admeten matrius, podem afegir diversos triggers, com ara:
curl --request POST \
--url 'https://example.com/zabbix/api_jsonrpc.php' \
--header 'Authorization: Bearer ${AUTHORIZATION_TOKEN}' \
--header 'Content-Type: application/json-rpc' \
--data '{"jsonrpc":"2.0","method":"trigger.create","params":[{"description":"Processor load is too high on {HOST.NAME}","expression":"last(/Linux server/system.cpu.load[percpu,avg1])>5",},{"description":"Too many processes on {HOST.NAME}","expression":"avg(/Linux server/proc.num[],5m)>300",}],"id":4}'
Una resposta correcta contindr¨¤ els IDs dels triggers acabats de crear:
Activa un element; ¨¦s a dir, defineix el seu estat a "0":
curl --request POST \
--url 'https://example.com/zabbix/api_jsonrpc.php' \
--header 'Authorization: Bearer ${AUTHORIZATION_TOKEN}' \
--header 'Content-Type: application/json-rpc' \
--data '{"jsonrpc":"2.0","method":"item.update","params":{"itemid":"10092","status":0},"id":5}'
Una resposta correcta contindr¨¤ l'ID de l'element actualitzat:
El m¨¨tode item.update
, aix¨ª com altres m¨¨todes d'actualitzaci¨®, tamb¨¦ poden admetre matrius d'objectes i actualitzar diversos elements amb una ¨²nica crida a l'API.
Activar m¨²ltiples triggers; ¨¦s a dir, definir el seu estat a "0":
curl --request POST \
--url 'https://example.com/zabbix/api_jsonrpc.php' \
--header 'Authorization: Bearer ${AUTHORIZATION_TOKEN}' \
--header 'Content-Type: application/json-rpc' \
--data '{"jsonrpc":"2.0","method":"trigger.update","params":[{"triggerid":"13938","status":0},{"triggerid":"13939","status":0}],"id":6}'
Una resposta correcta contindr¨¤ els identificadors dels triggers actualitzats:
Aquest ¨¦s el m¨¨tode preferit per actualitzar. Alguns m¨¨todes de l'API com host.massupdate
permeten fer-ho amb codi m¨¦s senzill, per¨° no es recomana emprar aquests m¨¨todes, ja que s'esborraran en versions futures.
Fins ara, tot el que hem provat ha funcionat b¨¦. Per¨°, qu¨¨ passa si provem a fer una crida incorrecta de l'API? Provem de crear un altre equip cridant al m¨¨tode host.create per¨° ometent el par¨¤metre necessari groups
.
curl --request POST \
--url 'https://example.com/zabbix/api_jsonrpc.php' \
--header 'Authorization: Bearer ${AUTHORIZATION_TOKEN}' \
--header 'Content-Type: application/json-rpc' \
--data '{"jsonrpc":"2.0","method":"host.create","params":{"host":"Linux server","interfaces":[{"type":1,"main":1,"useip":1,"ip":"192.168.3.1","dns":"","port":"10050"}]},"id":7}'
La resposta contindr¨¤, doncs, un missatge d'error:
{
"jsonrpc": "2.0",
"error": {
"code": -32602,
"message": "Par¨¤metres incorrectes.",
"data": "No hi ha grups per l'equip \"Linux server\"."
},
"id": 7
}
Si es produeix un error, en lloc de la propietat result
, l'objecte de resposta contindr¨¤ una propietat error
amb les dades seg¨¹ents:
code
- un codi d'error;message
- un breu resum de l'error;data
- un missatge d'error m¨¦s detallat.Es poden produir errors en diferents casos, com ara emprar valors d'entrada incorrectes, esgotar el temps d'espera d'una sessi¨® o provar d'accedir a objectes que no existeixen. La vostra aplicaci¨® ha d'¨¦sser capa? de gestionar aquests errors.
Per simplificar la gesti¨® de versions de l'API, des de la versi¨® de Áú»¢¶Ä²© 2.0.4 l'API t¨¦ la mateixa versi¨® que Áú»¢¶Ä²©. Podeu emprar el m¨¨tode apiinfo.version per esbrinar la versi¨® de l'API amb la qual treballeu. Aix¨° pot ¨¦sser ¨²til per refinar la vostra aplicaci¨® per emprar funcions espec¨ªfiques de la versi¨®.
Áú»¢¶Ä²© garanteix la compatibilitat enrere de les funcions dins d'una versi¨® important. Quan fem canvis incompatibles entre versions principals, normalment Áú»¢¶Ä²© deixa les funcions antigues com a obsoletes a la versi¨® seg¨¹ent i despr¨¦s les suprimim una segona versi¨® m¨¦s enll¨¤. De vegades ¨¦s possible que Áú»¢¶Ä²© tregui la funcionalitat entre les versions principals sense proporcionar compatibilitat amb versions anteriors. ?s important que mai confieu en funcions obsoletes i migreu cap a noves tan bon punt us sigui possible.
Podeu fer un seguiment de tots els canvis de l'API al registre de canvis de l'API.
Ara coneixeu for?a b¨¦ com treballar amb l'API Áú»¢¶Ä²©, per¨° no us atureu pas! Per aprendre'n m¨¦s, us recomanem consultar la llista d'APIs disponibles.