La API de Áú»¢¶Ä²© le permite recuperar y modificar mediante programaci¨®n la configuraci¨®n de Áú»¢¶Ä²© y proporciona acceso a datos hist¨®ricos. Es ampliamente utilizada para:
La API de Áú»¢¶Ä²© es una API basada en HTTP y se env¨ªa como parte de la interfaz web. Utiliza el protocolo JSON-RPC 2.0, lo que significa dos cosas:
Para obtener m¨¢s informaci¨®n sobre el protocolo y JSON, consulte la [especificaci¨®n JSON-RPC 2.0] (http://www.jsonrpc.org/specification) y la [p¨¢gina de inicio del formato JSON] (http://json.org/).
Para obtener m¨¢s informaci¨®n sobre c¨®mo integrar la funcionalidad de Áú»¢¶Ä²© en sus aplicaciones Python, consulte la biblioteca Python para la API de Áú»¢¶Ä²©.
La API consta de una serie de m¨¦todos que se agrupan nominalmente en APIs separadas. Cada uno de los m¨¦todos realiza una tarea espec¨ªfica. Por ejemplo, el m¨¦todo host.create
pertenece a la API host y es usado para crear nuevos equipos. Hist¨®ricamente las APIs a veces se denominan "clases".
La gran mayoria de las APIs contienen al menos cuatro m¨¦todos: get
, create
, update
y delete
para recuperar, crear, actualizar y borrar datos respectivamente, pero algunas de las APIs pueden proporcionar un conjunto totalmente distinto de m¨¦todos.
Una vez que haya configurado la interfaz, puede utilizar solicitudes HTTP remotas para llamar a la API. Para hacer eso, debe enviar solicitudes HTTP POST al archivo api_jsonrpc.php
ubicado en el directorio de la interfaz. Por ejemplo, si su interfaz de Áú»¢¶Ä²© est¨¢ instalada en https://example.com/zabbix
, una solicitud HTTP para llamar al m¨¦todo apiinfo.version
puede parecerse a esto:
curl --request POST \
--url 'https://example.com/zabbix/api_jsonrpc.php' \
--header 'Content-Type: application/json-rpc' \
--data '{"jsonrpc":"2.0","method":"apiinfo.version","params":{},"id":1}'
La solicitud debe tener el encabezado Content-Type
establecido en uno de estos valores: ²¹±è±ô¾±³¦²¹³¦¾±¨®²Ô/Âá²õ´Ç²Ô-°ù±è³¦
, ²¹±è±ô¾±³¦²¹³¦¾±¨®²Ô/Âá²õ´Ç²Ô
o ²¹±è±ô¾±³¦²¹³¦¾±¨®²Ô/Âá²õ´Ç²Ôrequest
.
El objeto de solicitud contiene las siguientes propiedades:
jsonrpc
: la versi¨®n del protocolo JSON-RPC utilizada por la API (la API de Áú»¢¶Ä²© implementa JSON-RPC versi¨®n 2.0);method
: el m¨¦todo API que se llama;params
: los par¨¢metros que se pasar¨¢n al m¨¦todo API;id
: un identificador arbitrario de la solicitud.Si la solicitud es correcta, la respuesta devuelta por la API deber¨ªa parecerse a esto:
El objeto de respuesta, a su vez, contiene las siguientes propiedades:
jsonrpc
- la versi¨®n del protocolo JSON-RPC;result
: los datos devueltos por el m¨¦todo;id
: un identificador de la solicitud correspondiente.En la siguiente secci¨®n vamos a guiarlo a trav¨¦s de algunos ejemplos con mayor detalle.
Para acceder a cualquier dato en Áú»¢¶Ä²©, necesita:
Por ejemplo, si desea obtener un nuevo token de autenticaci¨®n iniciando sesi¨®n como usuario Admin est¨¢ndar, entonces una solicitud JSON se ver¨ªa ²¹²õ¨ª:
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 proporcion¨® las credenciales correctamente, la respuesta devuelta por la API debe contener el token de autenticaci¨®n del usuario:
Todas las solicitudes de API requieren una autenticaci¨®n o un token de API. Puede proporcionar las credenciales mediante el encabezado de autorizaci¨®n en la solicitud:
curl --request POST \
--url 'https://example.com/zabbix/api_jsonrpc.php' \
--header 'Authorization: Bearer 0424bd59b807674191e7d77572075f33'
Si est¨¢ utilizando Apache, es posible que deba cambiar la configuraci¨®n predeterminada de Apache en /etc/apache2/apache2.conf
agregando la siguiente l¨ªnea:
De lo contrario, Apache podr¨ªa no enviar el encabezado de autorizaci¨®n en la solicitud.
La propiedad "auth" puede autorizar una solicitud de API.
Tenga en cuenta que la propiedad "auth" est¨¢ en desuso. Se eliminar¨¢ en futuras versiones.
curl --request POST \
--url 'https://example.com/zabbix/api_jsonrpc.php' \
--header 'Content-Type: application/json-rpc' \
--data '{"jsonrpc":"2.0","method":"host.get","params":{"output":["hostid"]},"auth":"0424bd59b807674191e7d77572075f33","id":1}'
Una cookie "zbx_session" se utiliza para autorizar una solicitud de API desde la interfaz de usuario de Áú»¢¶Ä²© realizada utilizando JavaScript (desde un m¨®dulo o un widget personalizado).
Ahora tiene un token de autenticaci¨®n de usuario v¨¢lido que puede usar para acceder a los datos en Áú»¢¶Ä²©. Por ejemplo, puede utilizar el M¨¦todo host.get para recuperar los ID, nombres de equipo e interfaces de todos los equipos configurados:
Solicitud:
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
es un archivo que contiene una consulta JSON. En lugar de un archivo, puede pasar la consulta en el argumento --data
.
datos.json
{"jsonrpc": "2.0","method": "host.get","params": {"output": ["hostid","host"],"selectInterfaces": ["interfaceid","ip"]},"id": 2
}
El objeto de respuesta contendr¨¢ los datos solicitados sobre los equipos:
{
"jsonrpc": "2.0",
"result": [
{
"hostid": "10084",
"host": "Áú»¢¶Ä²© server",
"interfaces": [
{
"interfaceid": "1",
"ip": "127.0.0.1"
}
]
}
],
"id": 2
}
Por motivos de rendimiento, siempre se recomienda enumerar las propiedades del objeto que desea recuperar. As¨ª, evitar¨¢ recuperarlo todo.
Ahora, cree una nueva ³¾¨¦³Ù°ù¾±³¦²¹ en el equipo "Áú»¢¶Ä²© server" usando los datos que ha obtenido del host.get
en la solicitud anterior. Esto se puede hacer usando el m¨¦todo 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 respuesta exitosa contendr¨¢ el ID de la ³¾¨¦³Ù°ù¾±³¦²¹ reci¨¦n creada, que se puede utilizar para hacer referencia a la ³¾¨¦³Ù°ù¾±³¦²¹ en las siguientes solicitudes:
El m¨¦todo item.create
as¨ª como otros m¨¦todos de creaci¨®n tambi¨¦n pueden aceptar matrices de objetos y crear varios elementos con una ¨²nica llamada a la API.
Entonces, si los m¨¦todos de creaci¨®n aceptan matrices, podemos agregar m¨²ltiples iniciadores ²¹²õ¨ª:
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 respuesta exitosa contendr¨¢ los ID de los iniciadores reci¨¦n creados:
Habilite una ³¾¨¦³Ù°ù¾±³¦²¹ estableciendo su estado en "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}'
La respuesta exitosa contendr¨¢ el ID de la ³¾¨¦³Ù°ù¾±³¦²¹ actualizada:
El m¨¦todo item.update
as¨ª como otros m¨¦todos de actualizaci¨®n tambi¨¦n pueden aceptar matrices de objetos y actualizar varias ³¾¨¦³Ù°ù¾±³¦²¹s con una ¨²nica llamada a la API.
Habilite m¨²ltiples iniciadores estableciendo su estado en "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}'
La respuesta exitosa contendr¨¢ los ID de los iniciadores actualizados:
Este es el m¨¦todo preferido de actualizaci¨®n. Algunos m¨¦todos API, como host.massupdate
, permiten escribir un c¨®digo m¨¢s simple. Sin embargo, no se recomienda utilizar estos m¨¦todos ya que se eliminar¨¢n en versiones futuras.
Hasta el momento todo lo que ha probado ha funcionado bien. Pero ?qu¨¦ sucede si intenta realizar una llamada incorrecta a la API? Intentar crear otro equipo llamando a host.create pero omitiendo el par¨¢metro obligatorio de 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 respuesta contendr¨¢ entonces un mensaje de error:
{
"jsonrpc": "2.0",
"error": {
"code": -32602,
"message": "Invalid params.",
"data": "No groups for host \"Linux server\"."
},
"id": 7
}
Si se ha producido un error, en lugar de la propiedad result
, el objeto de la respuesta contendr¨¢ la propiedad error
con los siguientes datos:
code
- un c¨®digo de error;message
: un breve resumen de errores;data
: un mensaje de error m¨¢s detallado.Los errores pueden ocurrir en varios casos, como por ejemplo, al usar valores de entrada incorrectos, un tiempo excedido de espera de sesi¨®n o intentar acceder a objetos no existentes. Su aplicaci¨®n deber¨ªa poder manejar correctamente este tipo de errores.
Para simplificar el versionado de API, desde Áú»¢¶Ä²© 2.0.4, la versi¨®n de la API coincide con la versi¨®n misma de Áú»¢¶Ä²© . Puede usar el m¨¦todo apiinfo.version para encontrar la versi¨®n de la API con la que est¨¢ trabajando. Esto puede ser muy ¨²til para ajustar su aplicaci¨®n y usar las funciones especificas de la versi¨®n.
Áú»¢¶Ä²© garantiza la compatibilidad con versiones anteriores en una misma versi¨®n principal. Cuando hacemos cambios incompatibles entre versiones principales, solemos dejar las caracter¨ªsticas anteriores como obsoletas en la nueva versi¨®n, y solo las eliminamos despu¨¦s del lanzamiento de la siguiente versi¨®n. Ocasionalmente podr¨ªamos eliminar funciones entre versiones principales sin proveer compatibilidad. Es importante que nunca conf¨ªe en ninguna funci¨®n obsoleta y actualice cuanto antes a las nuevas alternativas.
Puede seguir todos los cambios de la API en el API changelog.
Ahora ya sabe suficiente para empezar a trabajar con las API en Áú»¢¶Ä²©, pero no se detenga aqu¨ª. Para m¨¢s informaci¨®n le sugerimos que eche un vistazo a la lista de API disponibles.