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 Métricas en la fila del equipo
  • Haga clic en Crear métrica
  • Ingrese los parámetros de la métrica 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 métricas HTTP son:

Parámetro Descripción
Tipo Seleccione Agente HTTP aquí.
Clave Ingrese una clave de métrica única.
URL URL para conectarse y recuperar datos. Por ejemplo:
https://www.example.com
http://www.example.com/download
Los nombres de dominio se pueden especificar en caracteres Unicode. Se convierten automáticamente en punycode a ASCII al ejecutar la verificación HTTP.
El botón Analizar se puede utilizar para separar campos de consulta opcionales (como ?nombre=Admin&contraseña=micontraseña) de la URL, moviendo los atributos y valores a * Campos de consulta* para codificación automática de URL.
Limitado a 2048 caracteres.
Macros admitidas: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST. NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuario, macros de descubrimiento de bajo nivel.
Esto establece CURLOPT_URL opción cURL.
Campos de consulta Variables para la URL (ver arriba).
Especificados como pares de atributo y valor.
Los valores se codifican en URL automáticamente. Los valores de las macros se resuelven y luego se codifican en URL automáticamente.
Macros admitidas: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM .ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuario, macros de descubrimiento de bajo nivel.
Esto establece el CURLOPT_URL opción cURL.
Tipo de solicitud Seleccione el tipo de método de solicitud: GET, POST, PUT o HEAD
Tiempo de espera Zabbix no dedicará más del tiempo establecido a procesar la URL (1-60 segundos). En realidad, este parámetro define el tiempo máximo para establecer una conexión a la URL y el tiempo máximo para realizar una solicitud HTTP. Por lo tanto, Zabbix no gastará más de 2 x segundos de tiempo de espera en una verificación.
Se admiten sufijos de tiempo, p. 30s, 1m.
Macros admitidas: macros de usuario, macros de descubrimiento de bajo nivel.
Esto establece el CURLOPT_TIMEOUT cURL opción.
Tipo de cuerpo de la solicitud Seleccione el tipo de cuerpo de la solicitud:
Datos sin procesar: cuerpo de la solicitud HTTP personalizado, se sustituyen macros pero no se realiza codificación
Datos JSON: cuerpo de la solicitud HTTP en Formato JSON. Las macros se pueden utilizar como cadena, número, verdadero y falso; Las macros utilizadas como cadenas deben estar entre comillas dobles. Los valores de las macros se resuelven y luego se escapan automáticamente. Si no se especifica "Tipo de contenido" en los encabezados, el valor predeterminado será "Tipo de contenido: aplicación/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 luego se escapan automáticamente en un nodo y atributo de texto. Si no se especifica "Tipo de contenido" en los encabezados, el valor predeterminado será "Tipo de contenido: aplicación/xml"
Nota que para seleccionar datos XML se requiere libxml2.
Cuerpo de la solicitud Ingrese el cuerpo de la solicitud.
Macros admitidas: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM. ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuario, macros de descubrimiento de bajo nivel.
Encabezados Encabezados HTTP personalizados que se enviarán al realizar una solicitud.
Especificados como pares de atributo y valor.
Macros admitidos: {HOST.IP}, {HOST.CONN}, {HOST.DNS} , {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuario, macros de descubrimiento de bajo nivel.
Esto configura el CURLOPT _HTTPHEADER opción cURL.
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 dejará de ser compatible. Si está vacío, no se realiza ninguna verificación.
Por ejemplo: 200,201,210-299
Macros admitidas en la lista: macros de usuario, macros de descubrimiento de bajo nivel.
Esto utiliza el CURLINFO_RESPONSE_CODE opción cURL.
Seguir redirecciones Marque la casilla de verificación para seguir las redirecciones HTTP.
Esto configura la opción de cURL CURLOPT_FOLLOWLOCATION.
Modo de recuperación Seleccione la parte de la respuesta que se debe recuperar:
Cuerpo - solo cuerpo
Encabezados - solo encabezados
Cuerpo y encabezados - cuerpo y encabezados
Convertir a JSON Los encabezados se guardan como pares de atributo y valor bajo la clave "encabezado".
Si se encuentra 'Tipo de contenido: aplicación/json', 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, usando el formato [protocolo://][nombre de usuario[:contraseña]@]proxy.example.com[:puerto].
El opcional El prefijo protocolo:// se puede utilizar para especificar protocolos proxy alternativos (por ejemplo, https, calcetines4, calcetines5; consulte documentación; el soporte del prefijo de protocolo se agregó en cURL 7.21.7). Sin ningún protocolo especificado, el proxy será tratado como un proxy HTTP. Si especifica el protocolo incorrecto, la conexión fallará y el elemento dejará de ser 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, HTTPS. _APODERADO. Si no se especifica, el proxy no sobrescribirá las variables de entorno relacionadas con el proxy. El valor ingresado se transmite "tal cual", no se realiza ninguna verificación de idoneidad.
Tenga en cuenta que solo se admite la autenticación simple con el proxy HTTP.
Macros admitidas: {HOST.IP}, {HOST.CONN} , {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuario, macros de descubrimiento de bajo nivel.<br >Esto configura la opción cURL CURLOPT_PROXY.
Autenticación HTTP Tipo de autenticación:
Ninguno: no se utiliza autenticación.
Básico: se utiliza autenticación básica.
NTLM - NTLM (Windows NT LAN Manager) se utiliza autenticación.
Kerberos: se utiliza autenticación Kerberos. Consulte también: Configuración de Kerberos con Zabbix.
Digest: se utiliza autenticación implícita.
Seleccionar un método de autenticación proporcionará dos campos adicionales para ingresar un usuario. nombre y contraseña, donde se admiten macros de usuario y macros de descubrimiento de bajo nivel.
Esto configura la opción cURL CURLOPT_HTTPAUTH.
SSL verificar par Marque la casilla de verificación 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) de todo el sistema. Puede anular la ubicación de los archivos CA utilizando el servidor Zabbix o el parámetro de configuración de proxy SSLCALocation.
Esto establece la cURL CURLOPT_SSL_VERIFYPEER opción.
SSL verificar equipo Marque la casilla de verificación para verificar que el campo Nombre común o el campo Nombre alternativo del sujeto del certificado del servidor web coincidan.
Esto establece el CURLOPT_SSL_VERIFYHOST opción cURL.
Archivo de certificado SSL Nombre del archivo de certificado SSL utilizado para la autenticación del cliente. El archivo del certificado debe estar en formato PEM1. Si el archivo del 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 lo especifica el servidor Zabbix o el parámetro de configuración del proxy SSLCertLocation.
Macros admitidas: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME }, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuario, macros de descubrimiento de bajo nivel.
Esto establece el CURLOPT_SSLCERT opción cURL.
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 lo especifica el servidor Zabbix o el parámetro de configuración del proxy SSLKeyLocation.
Macros admitidas: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME }, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuario, macros de descubrimiento de bajo nivel.
Esto establece el CURLOPT_SSLKEY opción de rizo.
Contraseña de clave SSL Contraseña del archivo de clave privada SSL.
Macros admitidas: macros de usuario, macros de descubrimiento de bajo nivel.
Esto establece el CURLOPT_KEYPASSWD opción de curvatura.
Habilitar captura Con esta casilla de verificación marcada, el elemento también funcionará como elemento de captura y aceptará datos enviados a este elemento por el remitente de Zabbix o utilizando el protocolo de remitente de Zabbix.
Equipos permitidos Visible solo si la casilla de verificación Habilitar captura está marcada.
Lista de direcciones IP delimitadas por comas, opcionalmente en notación CIDR, o nombres DNS.
Si se especifica, las conexiones entrantes solo se aceptarán desde el 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 IPv4. o dirección IPv6.
'0.0.0.0/0' se puede utilizar 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 por 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}
Los espacios y macros de usuario están permitidos en este campo.
Macros de host: {HOST.HOST}, {HOST.NAME}, {HOST.IP}, {HOST.DNS}, {HOST.CONN} están permitidos 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 el proxy.

Para HTTP: establezca la variable de entorno http_proxy para el usuario del servidor Zabbix. Por ejemplo:
http_proxy=http://proxy_ip:proxy_port.

Para HTTPS: configure la variable de entorno HTTPS_PROXY. Por ejemplo:
HTTPS_PROXY=http://proxy_ip:proxy_port. Más detalles están disponibles ejecutando un comando de shell: # man curl.

[1] Zabbix admite únicamente archivos de certificado y clave privada en formato PEM. En caso de tener tu certificado y datos de clave privada en un archivo de formato PKCS #12 (generalmente con extensión *.p12 o *.pfx) puede generar el archivo PEM 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: