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 utilizando el remitente Zabbix o el protocolo del remitente 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 un equipo monitoreado.

El agente HTTP admite HTTP y HTTPS. Zabbix seguirá opcionalmente las 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 estar configurado inicialmente con soporte cURL (libcurl).

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 elementos 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 un elemento 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": falso,
           "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 Búsqueda elástica:

  • Crear un elemento POST con URL: http://localhost:9200/str/values/_search?scroll=10s
  • Configure el siguiente cuerpo POST para obtener la carga del procesador (1 promedio mínimo por núcleo)
{
           "consulta": {
               "bool": {
                   "deber": [{
                       "juego": {
                           "ítemid": 28275
                       }
                   }],
                   "filtro": [{
                       "rango": {
                           "reloj": {
                               "gt": 1517565836,
                               "lte": 1517566137
                           }
                       }
                   }]
               }
           }
       }
  • Recibió:
{
           "_scroll_id": "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAAAkFllRMlZBWS1UU1pxTmdEeGVwQjRBTFEAAAAAAAAAJRZZUTJWQVktVFNacU5nRHhlcEI0QUxRAAAAAAAAACYWWVEyVkFZLVRTWnFOZ0R4ZXBCNEFMUQAAAAAAAAAnFllRMlZBWS1UU1pxTmdEeGVwQjRBTFEAAAAAAAAAKBZZUTJWQVktVFNacU5nRHhlcEI0QUxR",
           "tomó": 18,
           "timed_out": falso,
           "_fragmentos": {
               "totales": 5,
               "exitoso": 5,
               "omitido": 0,
               "fallido": 0
           },
           "golpes": {
               "totales": 1,
               "puntuación_máxima": 1.0,
               "golpes": [{
                   "_index": "dbl",
                   "_type": "valores",
                   "_id": "dqX9VWEBV6sEKSMyk6sw",
                   "_puntuación": 1.0,
                   "_fuente": {
                       "ítemid": 28275,
                       "valor": "0.138750",
                       "reloj": 1517566136,
                       "ns": 25388713,
                       "ttl": 604800
                   }
               }]
           }
       }
  • Ahora use un paso de preprocesamiento JSONPath para obtener el valor del elemento: $.hits.hits[0]._source.value
Ejemplo 3

Comprobando si la API de Zabbix está viva, usando apiinfo.version.

  • Configuración del artículo:

Tenga en cuenta el uso del método POST con datos JSON, configurando encabezados de solicitud y pidiendo devolver solo encabezados:

  • Preprocesamiento del valor del elemento con expresión regular para obtener el código HTTP:

  • Comprobando el resultado en Últimos datos:

Ejemplo 4

Recuperación de información meteorológica conectándose a Openweathermap servicio público.

  • Configure un elemento maestro para la recopilación masiva de datos en un solo JSON:

Tenga en cuenta el uso de macros en los campos de consulta. Consulte el Openweathermap API para saber cómo llenarlos.

Ejemplo de JSON devuelto en respuesta al agente HTTP:

{
           "cuerpo": {
               "coord": {
                   "lón": 40.01,
                   "lat": 56,11
               },
               "clima": [{
                   "identificación": 801,
                   "principal": "Nubes",
                   "descripcion": "pocas nubes",
                   "icono": "02n"
               }],
               "base": "estaciones",
               "principal": {
                   "temperatura": 15.14,
                   "presión": 1012.6,
                   "humedad": 66,
                   "temp_min": 15.14,
                   "temp_max": 15.14,
                   "nivel_del_mar": 1030.91,
                   "nivel_nivel": 1012.6
               },
               "viento": {
                   "velocidad": 1.86,
                   "grado": 246.001
               },
               "nubes": {
                   "todos": 20
               },
               "dt": 1526509427,
               "sistema": {
                   "mensaje": 0.0035,
                   "país": "RU",
                   "amanecer": 1526432608,
                   "puesta de sol": 1526491828
               },
               "id": 487837,
               "nombre": "Stavrovo",
               "bacalao": 200
           }
       }

La siguiente tarea es configurar elementos dependientes que extraen datos del JSON.

  • Configure un elemento dependiente de la muestra para la humedad:

Otras métricas meteorológicas como 'Temperatura' se agregan en el mismo manera.

  • Preprocesamiento de valor de elemento dependiente de muestra con JSONPath:

  • Consultar el resultado de los datos meteorológicos en Últimos datos:

Ejemplo 5

Conectarse a la página de estado de Nginx y obtener sus métricas a granel.

  • Configurar Nginx siguiendo el [oficial guía] (https://nginx.ru/en/docs/http/ngx_http_stub_status_module.html).
  • Configure un elemento maestro para la recopilación masiva de datos:

Ejemplo de salida de estado de stub de Nginx:

Conexiones activas: 1 Conexiones activas:
       el servidor acepta solicitudes manejadas
        52 52 52
       Lectura: 0 Escritura: 1 Espera: 0

La siguiente tarea es configurar elementos dependientes que extraen datos.

  • Configure un elemento dependiente de muestra para solicitudes por segundo:

  • Preprocesamiento de valor de elemento dependiente de muestra con expresión regular el servidor acepta solicitudes manejadas\s+([0-9]+) ([0-9]+) ([0-9]+):

  • Verifique el resultado completo del módulo stub en Últimos datos: