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 Recopilación de datos > Hosts.
- Haga clic en Items en la fila del host.
- Haga clic en Crear item.
- Introduzca los parámetros del item en el formulario.

Todos los campos de entrada obligatorios están marcados con un asterisco rojo.
Los campos que requieren información específica para los items HTTP son:
| Parámetro | Descripción |
|---|---|
| Tipo | Seleccione aquí HTTP agent. |
| Clave | Introduzca una clave de item única. |
| URL | URL a la que conectarse para recuperar datos. Por ejemplo:https://www.example.comhttp://www.example.com/downloadLos nombres de dominio se pueden especificar con caracteres Unicode. Se convierten automáticamente a punycode ASCII al ejecutar la comprobación HTTP. El botón Analizar se puede utilizar para separar los campos de consulta opcionales (como ?key=value&limit=10) de la URL y mover los atributos y valores a Campos de consulta para la codificación automática de la URL.Por motivos de seguridad, no incluya nombres de usuario ni contraseñas reales en las URL. Utilice macros de usuario para evitar exponer las credenciales. 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 y macros de descubrimiento de bajo nivel.Esto establece la opción cURL CURLOPT_URL. |
| Campos de consulta | Variables para la URL (consulte lo anterior). Se especifican como pares de atributo y valor. Los valores se codifican automáticamente para la URL. Los valores de las macros se resuelven y, a continuación, se codifican automáticamente para 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 y macros de descubrimiento de bajo nivel.Esto establece la opción cURL CURLOPT_URL. |
| Tipo de solicitud | Seleccione el tipo de método de solicitud: GET, POST, PUT o HEAD. |
| Tipo de cuerpo de la solicitud | Seleccione el tipo de cuerpo de la solicitud: Datos sin procesar: cuerpo de solicitud HTTP personalizado; las macros se sustituyen, pero no se realiza ninguna codificación. Datos JSON: cuerpo de solicitud HTTP en formato JSON. Las macros se pueden utilizar como cadenas, números, true y false; las macros utilizadas como cadenas deben estar entre comillas dobles. Los valores de las macros se resuelven y se escapan automáticamente. Si no se especifica "Content-Type" en los encabezados, se utilizará de forma predeterminada "Content-Type: application/json". Datos XML: cuerpo de solicitud HTTP en formato XML. Las macros se pueden utilizar como nodo de texto, atributo o sección CDATA. Los valores de las macros se resuelven y se escapan automáticamente en un nodo de texto y un atributo. Si no se especifica "Content-Type" en los encabezados, se utilizará de forma predeterminada "Content-Type: application/xml". Tenga en cuenta que seleccionar Datos XML requiere libxml2. |
| Cuerpo de la solicitud | 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 y macros de descubrimiento de bajo nivel. |
| Encabezados | 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 y macros de descubrimiento de bajo nivel.Esto establece la opción cURL CURLOPT_HTTPHEADER. |
| Códigos de estado requeridos | Lista de códigos de estado HTTP esperados. Si Zabbix obtiene un código que no está en la lista, el item pasará a ser no compatible. Si está vacía, no se realiza ninguna comprobación. Por ejemplo: 200,201,210-299Macros compatibles en la lista: macros de usuario y macros de descubrimiento de bajo nivel. Esto utiliza la opción cURL CURLINFO_RESPONSE_CODE. |
| Seguir redirecciones | Marque la casilla para seguir las redirecciones HTTP. Esto establece la opción cURL CURLOPT_FOLLOWLOCATION. |
| Modo de recuperación | Seleccione la parte de la respuesta que se debe recuperar: Cuerpo: solo el cuerpo Encabezados: solo los encabezados Cuerpo y encabezados: cuerpo y encabezados |
| Convertir a JSON | Los encabezados se guardan como pares de atributo y valor bajo la clave "header" si Modo de recuperación no está establecido en Cuerpo. Si se encuentra 'Content-Type: application/json', el cuerpo se guarda como un objeto; de lo contrario, se almacena como una cadena. Por ejemplo: ![]() |
| HTTP proxy | Puede especificar un proxy HTTP que se utilizará, con el formato [protocol://][username[:password]@]proxy.example.com[:port].El prefijo opcional protocol:// se puede utilizar 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 un protocolo incorrecto, la conexión fallará y el item pasará a ser no compatible.De forma predeterminada, se utilizará el puerto 1080.Si se especifica, el proxy sobrescribirá las variables de entorno relacionadas con el proxy, como http_proxy y HTTPS_PROXY. Si no se especifica, el proxy no sobrescribirá las variables de entorno relacionadas con el proxy. El valor introducido se pasa "tal cual"; no se realiza ninguna comprobación de validez.Tenga en cuenta que con el proxy HTTP solo se admite la 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 y macros de descubrimiento de bajo nivel.Esto establece la opción cURL CURLOPT_PROXY. |
| Autenticación HTTP | Seleccione la opción de autenticación: Ninguna: no se utiliza autenticación; Basic: se utiliza autenticación básica; NTLM: se utiliza autenticación NTLM (Windows NT LAN Manager); Kerberos: se utiliza autenticación Kerberos (consulte también: Configuración de Kerberos con Zabbix); Digest: se utiliza autenticación Digest. Esto establece la opción cURL CURLOPT_HTTPAUTH. |
| Nombre de usuario | Introduzca el nombre de usuario (hasta 255 caracteres). Este campo está disponible si Autenticación HTTP está establecido en Basic, NTLM, Kerberos o Digest. Se admiten macros de usuario y macros de descubrimiento de bajo nivel. |
| Contraseña | Introduzca la contraseña del usuario (hasta 255 caracteres). Este campo está disponible si Autenticación HTTP está establecido en Basic, NTLM, Kerberos o Digest. Se admiten macros de usuario y macros de descubrimiento de bajo nivel. |
| Verificar par SSL | Marque la casilla para verificar el certificado SSL del web server. El certificado del server se verifica con los certificados de la autoridad certificadora (CA) de confianza de la ubicación de CA de todo el sistema. Puede sobrescribir la ubicación de los archivos de CA mediante el parámetro de configuración SSLCALocation del server o proxy de Zabbix.Esto establece la opción cURL CURLOPT_SSL_VERIFYPEER. |
| Verificar host SSL | Marque la casilla para verificar que el campo Common Name o el campo Subject Alternate Name del certificado del web server coincida. Esto establece la opción cURL CURLOPT_SSL_VERIFYHOST. |
| Archivo de certificado SSL | 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 Archivo de clave SSL. Si la clave está cifrada, especifique la contraseña en el campo 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 y macros de descubrimiento de bajo nivel.Esto establece la opción cURL CURLOPT_SSLCERT. |
| Archivo de clave SSL | 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 y macros de descubrimiento de bajo nivel.Esto establece la opción cURL CURLOPT_SSLKEY. |
| Contraseña de la clave SSL | Contraseña del archivo de clave privada SSL. Macros compatibles: macros de usuario y macros de descubrimiento de bajo nivel. Esto establece la opción cURL CURLOPT_KEYPASSWD. |
| Tiempo de espera | Zabbix no dedicará más del tiempo establecido a procesar 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 Tiempo de espera segundos a una comprobación. Esto establece la opción cURL CURLOPT_TIMEOUT.Para obtener más información sobre el parámetro Tiempo de espera, consulte los atributos generales de los items. |
| Habilitar 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: Items trapper. |
| Hosts permitidos | Visible solo si la casilla Habilitar 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, 127.0.0.1, ::127.0.0.1 y ::ffff:127.0.0.1 se tratan por igual, y ::/0 permitirá cualquier dirección IPv4 o IPv6.Se puede utilizar 0.0.0.0/0 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}En este campo 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}. |
Si el campo HTTP proxy se deja vacío, otra forma de utilizar un proxy HTTP es establecer variables de entorno relacionadas con el 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 admite únicamente certificados y claves privadas en formato PEM. Si los datos del certificado y la clave privada están en un archivo con formato PKCS #12 (normalmente con la extensión *.p12 o *.pfx), puede generar el archivo PEM a partir de él mediante 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:

