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 elemento HTTP:

  • Ir a: Recopilación de datosEquipos
  • Haga clic en Elementos en la fila del equipo
  • Haga clic en Crear elemento
  • Ingrese los parámetros del elemento en el formulario

Todos los campos obligatorios están marcados con un asterisco rojo.

Los campos que requieren información específica para los elementos HTTP son:

Parámetro Descripción
Tipo Seleccione Agente HTTP aquí.
Clave Ingrese una clave de elemento única.
URL URL a la que conectarse y recuperar datos. Por ejemplo:
https://www.ejemplo.com
http://www.ejemplo.com/descargar
Los nombres de dominio pueden especificarse en caracteres Unicode. Se convierten automáticamente a ASCII mediante punycode al ejecutar la comprobación HTTP.
El botón Analizar puede usarse para separar los campos de consulta opcionales (como ?name=Admin&password=mypassword) de la URL, moviendo los atributos y valores a Campos de consulta para su codificación automática en URL.
Limitado a 2048 caracteres.
Macros soportadas: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuario, macros de bajo nivel.
Esto establece la opción cURL CURLOPT_URL.
Campos de consulta Variables para la URL (ver arriba).
Especificadas como pares de atributo y valor.
Los valores se codifican automáticamente en URL. Los valores de macros se resuelven y luego se codifican automáticamente en URL.
Macros soportadas: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuario, macros 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 solicitud Seleccione el tipo de cuerpo de la solicitud:
Datos sin procesar - cuerpo de solicitud HTTP personalizado, se sustituyen macros pero no se realiza codificación
Datos JSON - 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 macros se resuelven y luego se escapan automáticamente. Si no se especifica "Content-Type" en las cabeceras, se establecerá por defecto en "Content-Type: application/json"
Datos XML - cuerpo de solicitud HTTP en formato XML. Las macros pueden usarse como nodo de texto, atributo o sección CDATA. Los valores de macros se resuelven y luego se escapan automáticamente en un nodo de texto y atributo. Si no se especifica "Content-Type" en las cabeceras, se establecerá por defecto en "Content-Type: application/xml"
Nota que seleccionar Datos XML requiere libxml2.
Cuerpo de la solicitud Ingrese el cuerpo de la solicitud.
Macros soportadas: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuario, macros de bajo nivel.
Cabeceras Cabeceras HTTP personalizadas que se enviarán al realizar una solicitud.
Especificadas como pares de atributo y valor.
Macros soportadas: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuario, macros 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 elemento se volverá no soportado. Si está vacío, no se realiza ninguna comprobación.
Por ejemplo: 200,201,210-299
Macros soportadas en la lista: macros de usuario, macros de bajo nivel.
Esto utiliza la opción cURL CURLINFO_RESPONSE_CODE.
Seguir redirecciones Marque la casilla para seguir redirecciones HTTP.
Esto establece la opción cURL CURLOPT_FOLLOWLOCATION.
Modo de recuperación Seleccione la parte de la respuesta que debe recuperarse:
Cuerpo - solo el cuerpo
Cabeceras - solo las cabeceras
Cuerpo y cabeceras - cuerpo y cabeceras
Convertir a JSON Las cabeceras 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', entonces el cuerpo se guarda como un objeto, de lo contrario se almacena como cadena, por ejemplo:
Proxy HTTP Puede especificar un proxy HTTP para usar, utilizando el formato [protocolo://][usuario[:contraseña]@]proxy.ejemplo.com[:puerto].
El prefijo opcional protocolo:// puede usarse para especificar protocolos de proxy alternativos (por ejemplo, https, socks4, socks5; ver documentación; el soporte para el prefijo de protocolo se agregó en cURL 7.21.7). Si no se especifica protocolo, el proxy se tratará como un proxy HTTP. Si especifica el protocolo incorrecto, la conexión fallará y el elemento se volverá no soportado.
Por defecto, se usará el puerto 1080.
Si se especifica, el proxy sobrescribirá las variables de entorno relacionadas con el proxy como http_proxy, HTTPS_PROXY. Si no se especifica, el proxy no sobrescribirá las variables de entorno relacionadas con el proxy. El valor ingresado se pasa "tal cual", no se realiza ninguna comprobación de validez.
Nota que solo se admite autenticación simple con proxy HTTP.
Macros soportadas: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuario, macros 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;
Básica - se utiliza autenticación básica;
NTLM - se utiliza autenticación NTLM (Windows NT LAN Manager);
Kerberos - se utiliza autenticación Kerberos (ver también: Configurar Kerberos con Zabbix);
Digest - se utiliza autenticación Digest.
Esto establece la opción cURL CURLOPT_HTTPAUTH.
Nombre de usuario Ingrese el nombre de usuario (hasta 255 caracteres).
Este campo está disponible si Autenticación HTTP está configurada en Básica, NTLM, Kerberos o Digest. Se admiten macros de usuario y macros de bajo nivel.
Contraseña Ingrese la contraseña de usuario (hasta 255 caracteres).
Este campo está disponible si Autenticación HTTP está configurada en Básica, NTLM, Kerberos o Digest. Se admiten macros de usuario y macros de bajo nivel.
Verificar SSL del par 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 certificadora (CA) a nivel de sistema. Puede sobrescribir la ubicación de los archivos CA usando el parámetro de configuración SSLCALocation del servidor o proxy 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 servidor web 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 el campo de archivo de clave SSL vacío. 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 servidor o proxy Zabbix.
Macros soportadas: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuario, macros 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 servidor o proxy Zabbix.
Macros soportadas: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuario, macros de bajo nivel.
Esto establece la opción cURL CURLOPT_SSLKEY.
Contraseña de clave SSL Contraseña del archivo de clave privada SSL.
Macros soportadas: macros de usuario, macros de bajo nivel.
Esto establece la opción cURL CURLOPT_KEYPASSWD.
Tiempo de espera Zabbix no dedicará más tiempo que el establecido para 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 en una comprobación.
Esto establece la opción cURL CURLOPT_TIMEOUT.
Para más información sobre el parámetro Tiempo de espera, consulte atributos generales del elemento.
Habilitar trampa Con esta casilla marcada, el elemento también funcionará como un elemento trapper y aceptará datos enviados al servidor o proxy Zabbix utilizando la utilidad Zabbix sender o el protocolo Zabbix sender, o aceptará datos enviados al servidor Zabbix utilizando el método API history.push. Para más información sobre el envío de datos, consulte: Elementos trapper.
Equipos permitidos Visible solo si la casilla Habilitar trampa está marcada.
Lista de direcciones IP separadas por comas, opcionalmente en notación CIDR, o nombres DNS.
Si se especifica, solo se aceptarán conexiones entrantes de los equipos listados aquí.
Si el soporte IPv6 está habilitado, 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 usarse 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.ejemplo.com, {HOST.HOST}
Se permiten espacios y macros de usuario en este campo.
Macros de equipo: {HOST.HOST}, {HOST.NAME}, {HOST.IP}, {HOST.DNS}, {HOST.CONN} están permitidas en este campo.

Si el campo Proxy HTTP se deja vacío, otra forma de usar 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 servidor Zabbix. Por ejemplo:
http_proxy=http://ip_proxy:puerto_proxy.

Para HTTPS - establezca la variable de entorno HTTPS_PROXY. Por ejemplo:
HTTPS_PROXY=http://ip_proxy:puerto_proxy. Hay más detalles disponibles ejecutando el comando de shell: # man curl.

[1] Zabbix solo admite archivos de certificado y clave privada en formato PEM. En caso de que tenga su certificado y datos de clave privada en un archivo en formato PKCS #12 (normalmente con extensión *.p12 o *.pfx) puede generar el archivo PEM a partir de él utilizando 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: