16 Agente HTTP
Descripción general
Este tipo de métrica permite el sondeo de datos utilizando el protocolo HTTP/HTTPS.
La captura también es posible usando la utilidad Zabbix sender o el protocolo de Zabbix sender (para enviar datos al servidor o proxy de Zabbix), o usando el método history.push de la API (para enviar datos al servidor Zabbix).
La comprobación de métricas HTTP la ejecuta el servidor Zabbix. Sin embargo, cuando los equipos son monitoreados por un proxy Zabbix, el proxy ejecuta las comprobaciones de métricas HTTP.
Las comprobaciones de métricas HTTP no requieren que ningún agente se ejecute en el equipo monitoreado.
El agente HTTP admite HTTP y HTTPS. Zabbix seguirá opcionalmente redirecciones (consulte la opción Seguir redirecciones a continuación). El número máximo de redirecciones está codificado en 10 (usando la opción cURL CURLOPT_MAXREDIRS).
El servidor/proxy Zabbix debe configurarse inicialmente con soporte para cURL (libcurl).
Las comprobaciones HTTP se ejecutan de forma asincrónica: no es necesario recibir la respuesta a una solicitud antes de que se inicien otras comprobaciones. La resolución de DNS también es asíncrona.
La simultaneidad máxima de comprobaciones asincrónicas es 1000 (definida por MaxConcurrentChecksPerPoller).
El número de sondeadores de agentes HTTP asíncronos se define mediante el parámetro StartHTTPAgentPollers.
La función cURL de conexiones persistentes se ha agregado a las comprobaciones del agente HTTP 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:
| Parameter | Description |
|---|---|
| Type | Seleccione HTTP agent aquí. |
| Key | Introduzca una clave de item única. |
| URL | URL a la que conectarse y de 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 de punycode a 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 la codificación automática de URL. Limitado a 2048 caracteres. Macros admitidas: {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 para URL. Los valores de las macros se resuelven y luego se codifican automáticamente para URL. Macros admitidas: {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 no se especifica "Content-Type" en los encabezados, se usará por defecto "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 atributo. Si no se especifica "Content-Type" en los encabezados, se usará por defecto "Content-Type: application/xml" Tenga en cuenta que seleccionar XML data requiere libxml2. |
| Request body | Introduzca el cuerpo de la solicitud. Macros admitidas: {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 admitidas: {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 recibe 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 admitidas en la lista: macros de usuario, macros de descubrimiento de bajo nivel. Esto utiliza 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á configurado como Body. Si se encuentra 'Content-Type: application/json', entonces 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 (p. ej., 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 no ser compatible.De forma predeterminada, se utilizará 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 realizar ninguna comprobación de validez. Tenga en cuenta que con el proxy HTTP solo se admite autenticación simple. Macros admitidas: {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 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 (véase también: Configuración de Kerberos con Zabbix); Digest - se utiliza 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 server se tomará automáticamente de la ubicación de la autoridad certificadora (CA) del sistema. Puede sobrescribir la ubicación de los archivos CA usando 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 el campo Common Name o el campo Subject Alternate Name del certificado del servidor web coincidan. 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 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 admitidas: {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 admitidas: {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 admitidas: macros de usuario, macros de descubrimiento de bajo nivel. Esto establece la opción cURL CURLOPT_KEYPASSWD. |
| Timeout | Zabbix no dedicará más tiempo que la cantidad establecida 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 cURL. Para obtener más información sobre el parámetro Timeout, consulte 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 API history.push. Para obtener más información sobre el envío de datos, consulte: Items trapper. |
| 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 se aceptarán solo 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 de la misma manera 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 ejecutando
un comando de shell: # man curl.
[1] Zabbix admite archivos de certificado y de clave privada solo en formato PEM. En caso de que tenga sus datos de 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íe solicitudes GET simples para recuperar datos de servicios como Elasticsearch:
- Cree una métrica GET con URL:
localhost:9200/?pretty - Observe 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": "Ya sabes, para buscar"
}
- Ahora extraiga el número de versión usando un paso de preprocesamiento JSONPath:
$.version.number
Ejemplo 2
Envíe solicitudes POST simples para recuperar datos de servicios como Elasticsearch:
- Crear un elemento POST con URL:
http://localhost:9200/str/values/_search?scroll=10s - Configurar el siguiente cuerpo POST para obtener la carga del procesador (1 promedio mínimo 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": {
"ítemid": 28275,
"value": "0.138750",
"clock": 1517566136,
"ns": 25388713,
"ttl": 604800
}
}]
}
}
- Ahora use un paso de preprocesamiento JSONPath para obtener el valor de la métrica:
$.hits.hits[0]._source.value
Ejemplo 3
Comprobando si la API de Zabbix está viva, usando apiinfo.version.
- Configuración de la métrica:

Tenga en cuenta el uso del método POST con datos JSON, configurando encabezados de solicitud y pidiendo devolver solo encabezados:
- Preprocesamiento del valor de la métrica con expresión regular para obtener el código HTTP:

- Comprobando el resultado en Datos más recientes:

Ejemplo 4
Recuperando información meteorológica conectándose al servicio público Openweathermap.
- Configure una métrica maestra para la recopilación masiva de datos en un solo JSON:

Tenga en cuenta el uso de macros en los campos de consulta. Consulte la API Openweathermap para saber cómo llenarlos.
Ejemplo de JSON devuelto en respuesta al agente HTTP:
{
"body": {
"coord": {
"lon": 40.01,
"lat": 56,11
},
"weather": [{
"id": 801,
"main": "Nubes",
"description": "pocas nubes",
"icon": "02n"
}],
"base": "estaciones",
"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 es configurar las métricas dependientes que extraen datos del JSON.
- Configure una métrica dependiente de ejemplo para la humedad:

Otras métricas meteorológicas como 'Temperatura' se agregan de la misma forma.
- Ejemplo de preprocesamiento de valor de métrica dependiente con JSONPath:

- Consultar el resultado de los datos meteorológicos en Datos más recientes:

Ejemplo 5
Conectarse a la página de estado de Nginx y obtener sus métricas de forma masiva.
- Configurar Nginx siguiendo la guía oficial .
- Configurar una métrica principal para la recopilación masiva de datos:

Ejemplo de salida de estado de Nginx stub:
Active connections: 1 Active connections:
server accepts handled requests
52 52 52
Reading: 0 Writing: 1 Waiting: 0
La siguiente tarea es configurar métricas dependientes que extraen datos.
- Configurar una métrica dependiente de ejemplo para solicitudes por segundo:

- Ejemplo de preprocesamiento del valor de la métrica dependiente con expresión regular
server accepts handled requests\s+([0-9]+) ([0-9]+) ([0-9]+):

- Verifique el resultado completo del módulo stub en Datos más recientes:

