9 HTTP agent
Overview
Este tipo de item permite la sondeo de datos mediante el protocolo HTTP/HTTPS.
También es posible el trapping mediante la utilidad Zabbix sender o el protocolo de Zabbix sender (para enviar datos a Zabbix server o proxy), o mediante el método de API history.push (para enviar datos a Zabbix server).
Las comprobaciones de item HTTP son ejecutadas por Zabbix server. Sin embargo, cuando los hosts son monitorizados por un Zabbix proxy, las comprobaciones de item HTTP son ejecutadas por el proxy.
Las comprobaciones de item HTTP no requieren que se ejecute ningún agent en el host monitorizado.
HTTP agent admite tanto HTTP como HTTPS. Zabbix seguirá opcionalmente las redirecciones (consulte la opción Follow redirects más abajo). El número máximo de redirecciones está codificado de forma fija en 10 (usando la opción de cURL CURLOPT_MAXREDIRS).
Zabbix server/proxy debe estar configurado inicialmente con soporte para cURL (libcurl).
Las comprobaciones HTTP se ejecutan de forma asíncrona: no es necesario recibir la respuesta de una solicitud antes de que se inicien otras comprobaciones. La resolución DNS también es asíncrona.
La concurrencia máxima de las comprobaciones asíncronas es 1000 (definida por MaxConcurrentChecksPerPoller).
El número de pollers asíncronos de HTTP agent está definido por el parámetro StartHTTPAgentPollers.
La función de cURL de conexiones persistentes se ha añadido a las comprobaciones de HTTP agent desde Zabbix 7.0.
Configuración
Para configurar un item HTTP:
- Vaya a Data collection > Hosts.
- Haga clic en Items en la fila del host.
- Haga clic en Create item.
- Introduzca los parámetros del item en el formulario.

Todos los campos obligatorios están marcados con un asterisco rojo.
Los campos que requieren información específica para los items HTTP son:
| Parameter | Description |
|---|---|
| Type | Seleccione HTTP agent aquí. |
| Key | Introduzca una clave de item única. |
| URL | URL a la que conectarse y desde la que recuperar datos. Por ejemplo: https://www.example.com http://www.example.com/download Los nombres de dominio pueden especificarse con caracteres Unicode. Se convierten automáticamente a punycode en ASCII al ejecutar la comprobación HTTP. El botón Parse puede utilizarse para separar los campos de consulta opcionales (como ?name=Admin&password=mypassword) de la URL, moviendo los atributos y valores a Query fields para su codificación automática en la URL. Limitado a 2048 caracteres. Macros compatibles: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuario, macros de descubrimiento de bajo nivel. Esto establece la opción cURL CURLOPT_URL. |
| Query fields | Variables para la URL (véase arriba). Se especifican como pares de atributo y valor. Los valores se codifican automáticamente en la URL. Los valores de las macros se resuelven y luego se codifican automáticamente en la URL. Macros compatibles: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuario, macros de descubrimiento de bajo nivel. Esto establece la opción cURL CURLOPT_URL. |
| Request type | Seleccione el tipo de método de solicitud: GET, POST, PUT o HEAD |
| Request body type | Seleccione el tipo de cuerpo de la solicitud: Raw data - cuerpo de solicitud HTTP personalizado, las macros se sustituyen pero no se realiza ninguna codificación JSON data - cuerpo de solicitud HTTP en formato JSON. Las macros pueden usarse como cadena, número, true y false; las macros usadas como cadenas deben ir entre comillas dobles. Los valores de las macros se resuelven y luego se escapan automáticamente. Si "Content-Type" no se especifica en los encabezados, el valor predeterminado será "Content-Type: application/json" XML data - cuerpo de solicitud HTTP en formato XML. Las macros pueden usarse como nodo de texto, atributo o sección CDATA. Los valores de las macros se resuelven y luego se escapan automáticamente en un nodo de texto y en un atributo. Si "Content-Type" no se especifica en los encabezados, el valor predeterminado será "Content-Type: application/xml" Note que seleccionar XML data requiere libxml2. |
| Request body | Introduzca el cuerpo de la solicitud. Macros compatibles: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuario, macros de descubrimiento de bajo nivel. |
| Headers | Encabezados HTTP personalizados que se enviarán al realizar una solicitud. Se especifican como pares de atributo y valor. Macros compatibles: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuario, macros de descubrimiento de bajo nivel. Esto establece la opción cURL CURLOPT_HTTPHEADER. |
| Required status codes | Lista de códigos de estado HTTP esperados. Si Zabbix obtiene un código que no está en la lista, el item pasará a no ser compatible. Si está vacío, no se realiza ninguna comprobación. Por ejemplo: 200,201,210-299 Macros compatibles en la lista: macros de usuario, macros de descubrimiento de bajo nivel. Esto usa la opción cURL CURLINFO_RESPONSE_CODE. |
| Follow redirects | Marque la casilla para seguir redirecciones HTTP. Esto establece la opción cURL CURLOPT_FOLLOWLOCATION. |
| Retrieve mode | Seleccione la parte de la respuesta que debe recuperarse: Body - solo el cuerpo Headers - solo los encabezados Body and headers - cuerpo y encabezados |
| Convert to JSON | Los encabezados se guardan como pares de atributo y valor bajo la clave "header" si Retrieve mode no está establecido en Body. Si se encuentra 'Content-Type: application/json', el cuerpo se guarda como un objeto; de lo contrario, se almacena como cadena, por ejemplo: ![]() |
| HTTP proxy | Puede especificar un proxy HTTP para usar, con el formato [protocol://][username[:password]@]proxy.example.com[:port].El prefijo opcional protocol:// puede utilizarse para especificar protocolos de proxy alternativos (por ejemplo, https, socks4, socks5; consulte la documentación; la compatibilidad con el prefijo de protocolo se añadió en cURL 7.21.7). Si no se especifica ningún protocolo, el proxy se tratará como un proxy HTTP. Si especifica el protocolo incorrecto, la conexión fallará y el item pasará a no ser compatible.De forma predeterminada, se usará el puerto 1080. Si se especifica, el proxy sobrescribirá las variables de entorno relacionadas con proxy, como http_proxy, HTTPS_PROXY. Si no se especifica, el proxy no sobrescribirá las variables de entorno relacionadas con proxy. El valor introducido se pasa "tal cual", sin ninguna comprobación de validez. Note que con HTTP proxy solo se admite autenticación simple. Macros compatibles: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuario, macros de descubrimiento de bajo nivel. Esto establece la opción cURL CURLOPT_PROXY. |
| HTTP authentication | Seleccione la opción de autenticación: None - no se usa autenticación; Basic - se usa autenticación básica; NTLM - se usa autenticación NTLM (Windows NT LAN Manager); Kerberos - se usa autenticación Kerberos (véase también: Configuring Kerberos with Zabbix); Digest - se usa autenticación Digest. Esto establece la opción cURL CURLOPT_HTTPAUTH. |
| User name | Introduzca el nombre de usuario (hasta 255 caracteres). Este campo está disponible si HTTP authentication está configurado como Basic, NTLM, Kerberos o Digest. Se admiten macros de usuario y macros de descubrimiento de bajo nivel. |
| Password | Introduzca la contraseña del usuario (hasta 255 caracteres). Este campo está disponible si HTTP authentication está configurado como Basic, NTLM, Kerberos o Digest. Se admiten macros de usuario y macros de descubrimiento de bajo nivel. |
| SSL verify peer | Marque la casilla para verificar el certificado SSL del servidor web. El certificado del servidor se tomará automáticamente de la ubicación de la autoridad de certificación (CA) a nivel del sistema. Puede sobrescribir la ubicación de los archivos CA mediante el parámetro de configuración SSLCALocation del server o proxy de Zabbix. Esto establece la opción cURL CURLOPT_SSL_VERIFYPEER. |
| SSL verify host | Marque la casilla para verificar que coincidan el campo Common Name o el campo Subject Alternate Name del certificado del servidor web. Esto establece la opción cURL CURLOPT_SSL_VERIFYHOST. |
| SSL certificate file | Nombre del archivo de certificado SSL utilizado para la autenticación del cliente. El archivo de certificado debe estar en formato PEM1. Si el archivo de certificado también contiene la clave privada, deje vacío el campo del archivo de clave SSL. Si la clave está cifrada, especifique la contraseña en el campo de contraseña de la clave SSL. El directorio que contiene este archivo se especifica mediante el parámetro de configuración SSLCertLocation del server o proxy de Zabbix. Macros compatibles: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuario, macros de descubrimiento de bajo nivel. Esto establece la opción cURL CURLOPT_SSLCERT. |
| SSL key file | Nombre del archivo de clave privada SSL utilizado para la autenticación del cliente. El archivo de clave privada debe estar en formato PEM1. El directorio que contiene este archivo se especifica mediante el parámetro de configuración SSLKeyLocation del server o proxy de Zabbix. Macros compatibles: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuario, macros de descubrimiento de bajo nivel. Esto establece la opción cURL CURLOPT_SSLKEY. |
| SSL key password | Contraseña del archivo de clave privada SSL. Macros compatibles: macros de usuario, macros de descubrimiento de bajo nivel. Esto establece la opción cURL CURLOPT_KEYPASSWD. |
| Timeout | Zabbix no dedicará más tiempo del establecido al procesamiento de la URL (1-600 segundos). En realidad, este parámetro define el tiempo máximo para establecer una conexión con la URL y el tiempo máximo para realizar una solicitud HTTP. Por lo tanto, Zabbix no dedicará más de 2 x Timeout segundos a una comprobación. Esto establece la opción cURL CURLOPT_TIMEOUT. Para obtener más información sobre el parámetro Timeout, consulte los atributos generales del item. |
| Enable trapping | Con esta casilla marcada, el item también funcionará como un item trapper y aceptará datos enviados al server o proxy de Zabbix mediante la utilidad Zabbix sender o el protocolo de Zabbix sender, o aceptará datos enviados al server de Zabbix mediante el método de API history.push. Para obtener más información sobre el envío de datos, consulte: Trapper items. |
| Allowed hosts | Visible solo si la casilla Enable trapping está marcada. Lista de direcciones IP separadas por comas, opcionalmente en notación CIDR, o nombres DNS. Si se especifica, las conexiones entrantes solo se aceptarán desde los hosts enumerados aquí. Si la compatibilidad con IPv6 está habilitada, entonces '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1' se tratan por igual y '::/0' permitirá cualquier dirección IPv4 o IPv6. '0.0.0.0/0' puede utilizarse para permitir cualquier dirección IPv4. Tenga en cuenta que las "direcciones IPv6 compatibles con IPv4" (prefijo 0000::/96) son compatibles, pero están obsoletas según RFC4291. Ejemplo: 127.0.0.1, 192.168.1.0/24, 192.168.3.1-255, 192.168.1-10.1-255, ::1,2001:db8::/32, mysqlserver1, zabbix.example.com, {HOST.HOST} Se permiten espacios y macros de usuario en este campo. Se permiten macros de host: {HOST.HOST}, {HOST.NAME}, {HOST.IP}, {HOST.DNS}, {HOST.CONN} en este campo. |
Si el campo HTTP proxy se deja vacío, otra forma de usar un proxy HTTP es establecer variables de entorno relacionadas con proxy.
Para HTTP - establezca la variable de entorno http_proxy para el usuario del server de Zabbix. Por ejemplo:
http_proxy=http://proxy_ip:proxy_port.
Para HTTPS - establezca la variable de entorno HTTPS_PROXY. Por ejemplo:
HTTPS_PROXY=http://proxy_ip:proxy_port. Hay más detalles disponibles al
ejecutar un comando de shell: # man curl.
[1] Zabbix solo admite archivos de certificado y clave privada en formato PEM. En caso de que tenga los datos de su certificado y clave privada en un archivo con formato PKCS #12 (normalmente con extensión *.p12 o *.pfx), puede generar el archivo PEM a partir de él usando los siguientes comandos:
openssl pkcs12 -in ssl-cert.p12 -clcerts -nokeys -out ssl-cert.pem
openssl pkcs12 -in ssl-cert.p12 -nocerts -nodes -out ssl-cert.key
Ejemplos
Ejemplo 1
Envía solicitudes GET simples para recuperar datos de servicios como Elasticsearch:
- Crea un item GET con la URL:
localhost:9200/?pretty - Observa la respuesta:
{
"name" : "YQ2VAY-",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "kH4CYqh5QfqgeTsjh2F9zg",
"version" : {
"number" : "6.1.3",
"build_hash" : "af51318",
"build_date" : "2018-01-26T18:22:55.523Z",
"build_snapshot" : false,
"lucene_version" : "7.1.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You know, for search"
}
- Ahora extrae el número de versión usando un paso de preprocesamiento JSONPath:
$.version.number
Ejemplo 2
Envía solicitudes POST simples para recuperar datos de servicios como Elasticsearch:
- Crea un item POST con la URL:
http://localhost:9200/str/values/_search?scroll=10s - Configura el siguiente cuerpo POST para obtener la carga del procesador (promedio de 1 minuto por núcleo)
{
"query": {
"bool": {
"must": [{
"match": {
"itemid": 28275
}
}],
"filter": [{
"range": {
"clock": {
"gt": 1517565836,
"lte": 1517566137
}
}
}]
}
}
}
- Recibido:
{
"_scroll_id": "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAAAkFllRMlZBWS1UU1pxTmdEeGVwQjRBTFEAAAAAAAAAJRZZUTJWQVktVFNacU5nRHhlcEI0QUxRAAAAAAAAACYWWVEyVkFZLVRTWnFOZ0R4ZXBCNEFMUQAAAAAAAAAnFllRMlZBWS1UU1pxTmdEeGVwQjRBTFEAAAAAAAAAKBZZUTJWQVktVFNacU5nRHhlcEI0QUxR",
"took": 18,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1.0,
"hits": [{
"_index": "dbl",
"_type": "values",
"_id": "dqX9VWEBV6sEKSMyk6sw",
"_score": 1.0,
"_source": {
"itemid": 28275,
"value": "0.138750",
"clock": 1517566136,
"ns": 25388713,
"ttl": 604800
}
}]
}
}
- Ahora usa un paso de preprocesamiento JSONPath para obtener el valor del item:
$.hits.hits[0]._source.value
Ejemplo 3
Comprobación de si la API de Zabbix está activa, usando apiinfo.version.
- Configuración del item:

Observe el uso del método POST con datos JSON, estableciendo encabezados de solicitud y solicitando que se devuelvan solo los encabezados:
- Preprocesamiento del valor del item con expresión regular para obtener el código HTTP:

- Comprobación del resultado en Latest data:

Ejemplo 4
Obtención de información meteorológica mediante la conexión al servicio público de Openweathermap.
- Configure un item maestro para la recopilación masiva de datos en un único JSON:

Observe el uso de macros en los campos de consulta. Consulte la API de Openweathermap para saber cómo completarlos.
Ejemplo de JSON devuelto en la respuesta al HTTP agent:
{
"body": {
"coord": {
"lon": 40.01,
"lat": 56.11
},
"weather": [{
"id": 801,
"main": "Clouds",
"description": "few clouds",
"icon": "02n"
}],
"base": "stations",
"main": {
"temp": 15.14,
"pressure": 1012.6,
"humidity": 66,
"temp_min": 15.14,
"temp_max": 15.14,
"sea_level": 1030.91,
"grnd_level": 1012.6
},
"wind": {
"speed": 1.86,
"deg": 246.001
},
"clouds": {
"all": 20
},
"dt": 1526509427,
"sys": {
"message": 0.0035,
"country": "RU",
"sunrise": 1526432608,
"sunset": 1526491828
},
"id": 487837,
"name": "Stavrovo",
"cod": 200
}
}
La siguiente tarea consiste en configurar items dependientes que extraigan datos del JSON.
- Configure un item dependiente de ejemplo para la humedad:

Otros métricos meteorológicos, como 'Temperature', se añaden de la misma manera.
- Ejemplo de preprocesamiento del valor de un item dependiente con JSONPath:

- Compruebe el resultado de los datos meteorológicos en Latest data:

Ejemplo 5
Conexión a la página de estado de Nginx y obtención de sus métricas en bloque.
- Configure Nginx siguiendo la guía oficial.
- Configure un item maestro para la recopilación de datos en bloque:

Salida de ejemplo de stub status de Nginx:
Active connections: 1 Active connections:
server accepts handled requests
52 52 52
Reading: 0 Writing: 1 Waiting: 0
La siguiente tarea es configurar items dependientes que extraigan los datos.
- Configure un item dependiente de ejemplo para solicitudes por segundo:

- Preprocesamiento de valor de un item dependiente de ejemplo con la expresión regular
server accepts handled requests\s+([0-9]+) ([0-9]+) ([0-9]+):

- Compruebe el resultado completo del módulo stub en Latest data:

