Se encuentra viendo la documentación de la versión en desarrollo, puede estar incompleta.
Esta página fue traducida automáticamente. Si detectas un error, selecciónalo y presiona Ctrl+Enter para informarlo a los editores.

16 Agente HTTP

Descripción general

Este tipo de métrica permite la recopilación de datos utilizando el protocolo HTTP/HTTPS. También es posible la captura utilizando la utilidad Zabbix sender o el protocolo de Zabbix sender (para enviar datos al servidor o proxy de Zabbix), o utilizando el método API history.push (para enviar datos al servidor de Zabbix).

Las comprobaciones de métricas HTTP son ejecutadas por el servidor Zabbix. Sin embargo, cuando los equipos son monitorizados por un proxy de Zabbix, las comprobaciones de métricas HTTP son ejecutadas por el proxy.

Las comprobaciones de métricas HTTP no requieren que ningún agente esté ejecutándose en el equipo que se está monitorizando.

El agente HTTP soporta tanto HTTP como HTTPS. Zabbix seguirá opcionalmente las redirecciones (ver la opción Seguir redirecciones más abajo). El número máximo de redirecciones está codificado en 10 (utilizando la opción cURL CURLOPT_MAXREDIRS).

El servidor/proxy de Zabbix debe estar inicialmente configurado con soporte para cURL (libcurl).

Las comprobaciones HTTP se ejecutan de forma asíncrona: 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 concurrencia máxima de comprobaciones asíncronas es 1000 (definida por MaxConcurrentChecksPerPoller).

El número de agentes de sondeo HTTP asíncronos está definido por el parámetro StartHTTPAgentPollers.

La característica de conexiones persistentes de cURL se ha añadido a las comprobaciones del agente HTTP desde Zabbix 7.0.

Configuración

Para configurar una métrica 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 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 a la que conectarse y recuperar datos. Por ejemplo:
https://www.example.com
http://www.example.com/download
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 la codificación automática de URL.
Limitado a 2048 caracteres.
Macros soportadas: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {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}, {HOST.PORT}, {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}, {HOST.PORT}, {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}, {HOST.PORT}, {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, la métrica se volverá no soportada. 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', 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 [protocol://][username[:password]@]proxy.example.com[:port].
El prefijo opcional protocol:// 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 la métrica se volverá no soportada.
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 introducido 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}, {HOST.PORT}, {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á configurado 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á configurado en Básica, NTLM, Kerberos o Digest. Se admiten macros de usuario y macros de bajo nivel.
Verificar par SSL 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 utilizando el parámetro de configuración SSLCALocation del servidor 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 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 de Zabbix.
Macros soportadas: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {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 de Zabbix.
Macros soportadas: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {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 en 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 de la métrica.
Habilitar trapping Con esta casilla marcada, la métrica también funcionará como una métrica trapper y aceptará datos enviados al servidor o proxy de Zabbix utilizando la utilidad Zabbix sender o el protocolo de Zabbix sender, o aceptará datos enviados al servidor de Zabbix utilizando el método API history.push. Para más información sobre el envío de datos, consulte: Métricas trapper.
Equipos 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, solo se aceptarán conexiones entrantes de los equipos listados aquí.
Si el soporte para 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.example.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://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 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" : "You know, for search"
           }
  • Ahora extraiga el número de versión utilizando un paso de preprocesamiento JSONPath: $.version.number
Ejemplo 2

Enviar solicitudes POST simples para recuperar datos de servicios como Elasticsearch:

  • Cree una métrica POST con la URL: http://localhost:9200/str/values/_search?scroll=10s
  • Configure el siguiente cuerpo POST para obtener la carga del procesador (promedio de 1 min 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 utilice 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á activa, usando apiinfo.version.

  • Configuración de la métrica:

Observe el uso del método POST con datos JSON, estableciendo cabeceras de solicitud y solicitando que solo se devuelvan las cabeceras:

  • Preprocesamiento del valor de la métrica con una expresión regular para obtener el código HTTP:

  • Comprobando el resultado en Últimos datos:

Ejemplo 4

Recuperar información meteorológica conectándose al servicio público de Openweathermap.

  • Configure una métrica principal para la recopilación masiva de datos en un único JSON:

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

Ejemplo de JSON devuelto en respuesta al agente HTTP:

{
           "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 es configurar métricas dependientes que extraigan datos del JSON.

  • Configure una métrica dependiente de ejemplo para la humedad:

Otras métricas meteorológicas como 'Temperatura' se añaden de la misma manera.

  • Ejemplo de preprocesamiento de valor de métrica dependiente con JSONPath:

  • Compruebe el resultado de los datos meteorológicos en Datos más recientes:

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 una métrica principal para la recopilación masiva de datos:

Salida de ejemplo del estado 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 métricas dependientes que extraigan los datos.

  • Configure una métrica dependiente de ejemplo para solicitudes por segundo:

  • Ejemplo de preprocesamiento del valor de la métrica dependiente 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 Últimos datos: