agent HTTP

Overview

Este tipo de item permite la sondeo de datos mediante el protocolo HTTP/HTTPS. También es posible el trapping mediante la utilidad Zabbix sender o el protocolo de Zabbix sender (para enviar datos al server o proxy de Zabbix), o mediante el método de API history.push (para enviar datos al server de Zabbix).

Las comprobaciones de items HTTP son ejecutadas por el server de Zabbix. Sin embargo, cuando los hosts son monitorizados por un proxy de Zabbix, las comprobaciones de items HTTP son ejecutadas por el proxy.

Las comprobaciones de items HTTP no requieren que se ejecute ningún agent en el host monitorizado.

HTTP agent admite tanto HTTP como HTTPS. Zabbix seguirá opcionalmente las redirecciones (consulte la opción Follow redirects más abajo). El número máximo de redirecciones está codificado de forma fija en 10 (usando la opción de cURL CURLOPT_MAXREDIRS).

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

Las comprobaciones HTTP se ejecutan de forma asíncrona: no es necesario recibir la respuesta de una solicitud antes de que se inicien otras comprobaciones. La resolución DNS también es asíncrona.

La concurrencia máxima de las comprobaciones asíncronas es 1000 (definida por MaxConcurrentChecksPerPoller).

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

La función de conexiones persistentes de cURL se ha añadido a las comprobaciones de HTTP agent desde Zabbix 7.0.

Configuración

Para configurar un item HTTP:

  1. Vaya a Recopilación de datos > Hosts.
  2. Haga clic en Items en la fila del host.
  3. Haga clic en Crear item.
  4. 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:

Parámetro Descripción
Tipo Seleccione aquí HTTP agent.
Clave Introduzca una clave de item única.
URL URL a la que conectarse para recuperar datos. Por ejemplo:
https://www.example.com
http://www.example.com/download
Los nombres de dominio pueden especificarse mediante caracteres Unicode. Se convierten automáticamente a punycode ASCII al ejecutar la comprobación HTTP.
El botón Analizar puede utilizarse para separar los campos de consulta opcionales (como ?key=value&limit=10) de la URL, trasladando los atributos y valores a Campos de consulta para la codificación automática de la URL.
Por motivos de seguridad, no incluya nombres de usuario ni contraseñas reales en las URL. Utilice macros de usuario para evitar exponer las credenciales.
Limitado a 2048 caracteres.
Macros compatibles: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuario y macros de descubrimiento de bajo nivel.
Esto establece la opción cURL CURLOPT_URL.
Campos de consulta Variables para la URL (consulte lo anterior).
Se especifican como pares de atributo y valor.
Los valores se codifican automáticamente para la URL. Los valores de las macros se resuelven y, a continuación, se codifican automáticamente para la URL.
Macros compatibles: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuario y macros de descubrimiento 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 la solicitud Seleccione el tipo de cuerpo de la solicitud:
Datos sin procesar: cuerpo personalizado de la solicitud HTTP; las macros se sustituyen, pero no se realiza ninguna codificación.
Datos JSON: cuerpo de la solicitud HTTP en formato JSON. Las macros pueden utilizarse como cadenas, números, true y false; las macros utilizadas como cadenas deben estar entre comillas dobles. Los valores de las macros se resuelven y se escapan automáticamente. Si no se especifica "Content-Type" en los encabezados, se utilizará de forma predeterminada "Content-Type: application/json".
Datos XML: cuerpo de la solicitud HTTP en formato XML. Las macros pueden utilizarse como nodo de texto, atributo o sección CDATA. Los valores de las macros se resuelven y se escapan automáticamente en un nodo de texto y un atributo. Si no se especifica "Content-Type" en los encabezados, se utilizará de forma predeterminada "Content-Type: application/xml".
Cuerpo de la solicitud Introduzca el cuerpo de la solicitud.
Macros compatibles: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuario y macros de descubrimiento de bajo nivel.
Encabezados Encabezados HTTP personalizados que se enviarán al realizar una solicitud.
Se especifican como pares de atributo y valor.
Macros compatibles: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuario y macros de descubrimiento 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 item dejará de ser compatible. Si está vacía, no se realiza ninguna comprobación.
Por ejemplo: 200,201,210-299.
Macros compatibles en la lista: macros de usuario y macros de descubrimiento de bajo nivel.
Esto utiliza la opción cURL CURLINFO_RESPONSE_CODE.
Seguir redirecciones Marque la casilla para seguir las 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
Encabezados: solo los encabezados
Cuerpo y encabezados: cuerpo y encabezados
Convertir a JSON Los encabezados 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 una cadena, por ejemplo:
HTTP proxy Puede especificar un HTTP proxy utilizando el formato [protocol://][username[:password]@]proxy.example.com[:port].
El prefijo opcional protocol:// puede utilizarse para especificar protocolos de proxy alternativos (por ejemplo, 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 HTTP proxy. Si especifica un protocolo incorrecto, la conexión fallará y el item 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 y HTTPS_PROXY. Si no se especifica, el proxy no sobrescribirá las variables de entorno relacionadas con el proxy. El valor introducido se transmite "tal cual"; no se realiza ninguna comprobación de validez.
Tenga en cuenta que con HTTP proxy solo se admite la autenticación simple.
Macros compatibles: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuario y macros de descubrimiento 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;
Basic: se utiliza autenticación básica;
NTLM: se utiliza autenticación NTLM (Windows NT LAN Manager);
Kerberos: se utiliza autenticación Kerberos (consulte también: Configuración de Kerberos con Zabbix);
Digest: se utiliza autenticación Digest.
Esto establece la opción cURL CURLOPT_HTTPAUTH.
Nombre de usuario Introduzca el nombre de usuario (hasta 255 caracteres).
Este campo está disponible si Autenticación HTTP está establecida en Basic, NTLM, Kerberos o Digest. Se admiten macros de usuario y macros de descubrimiento de bajo nivel.
Contraseña Introduzca la contraseña del usuario (hasta 255 caracteres).
Este campo está disponible si Autenticación HTTP está establecida en Basic, NTLM, Kerberos o Digest. Se admiten macros de usuario y macros de descubrimiento de bajo nivel.
Verificar par SSL Marque la casilla para verificar el certificado SSL del web server. El certificado del server se verifica con los certificados de la autoridad certificadora (CA) de confianza de la ubicación de CA de todo el sistema. Puede sobrescribir la ubicación de los archivos de CA mediante el parámetro de configuración SSLCALocation del server 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 web server 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 vacío el campo Archivo de clave SSL. Si la clave está cifrada, especifique la contraseña en el campo Contraseña de la 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 compatibles: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuario y macros de descubrimiento 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 server o proxy de Zabbix.
Macros compatibles: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, macros de usuario y macros de descubrimiento de bajo nivel.
Esto establece la opción cURL CURLOPT_SSLKEY.
Contraseña de la clave SSL Contraseña del archivo de clave privada SSL.
Macros compatibles: macros de usuario y macros de descubrimiento de bajo nivel.
Esto establece la opción cURL CURLOPT_KEYPASSWD.
Tiempo de espera Zabbix no dedicará más tiempo del establecido a 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 a una comprobación.
Esto establece la opción cURL CURLOPT_TIMEOUT.
Para obtener más información sobre el parámetro Tiempo de espera, consulte los atributos generales de los items.
Habilitar 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 de API history.push. Para obtener más información sobre el envío de datos, consulte: Items trapper.
Hosts 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.

El valor predeterminado es la macro de usuario {$TRAPPER.ALLOWED_HOSTS}. De forma predeterminada, {$TRAPPER.ALLOWED_HOSTS} es 127.0.0.1,::1. Puede introducir las direcciones directamente en el campo o cambiar el valor de la macro. Si se deja vacío, se denegarán las conexiones entrantes de todos los hosts. Si se especifica, las conexiones entrantes solo se aceptarán de los hosts incluidos aquí.
Si la compatibilidad con IPv6 está habilitada, 127.0.0.1, ::127.0.0.1 y ::ffff:127.0.0.1 se tratarán de la misma forma, 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}
En este campo se permiten espacios y macros de usuario.
Macros de host permitidas en este campo: {HOST.HOST}, {HOST.NAME}, {HOST.IP}, {HOST.DNS}, {HOST.CONN}.

Si el campo HTTP proxy se deja vacío, otra forma de utilizar un HTTP proxy consiste en establecer variables de entorno relacionadas con el 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 información disponible ejecutando un comando de shell: # man curl.

[1] Zabbix admite únicamente archivos de certificado y de clave privada en formato PEM. Si los datos del certificado y de la clave privada están en un archivo con formato PKCS #12 (normalmente con la extensión *.p12 o *.pfx), puede generar el archivo PEM a partir de él mediante 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ía solicitudes GET simples para recuperar datos de servicios como Elasticsearch:

  • Crea un item GET con la URL: localhost:9200/?pretty
  • Observa 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 extrae el número de versión usando un paso de preprocesamiento JSONPath: $.version.number
Ejemplo 2

Envía solicitudes POST simples para recuperar datos de servicios como Elasticsearch:

  • Crea un item POST con la URL: http://localhost:9200/str/values/_search?scroll=10s
  • Configura 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 usa un paso de preprocesamiento JSONPath para obtener el valor del item: $.hits.hits[0]._source.value
Ejemplo 3

Comprobación de si la API de Zabbix está activa, usando apiinfo.version.

  • Configuración del item:

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

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

  • Comprobación del resultado en Latest data:

Ejemplo 4

Obtención de información meteorológica mediante la conexión al servicio público de Openweathermap.

  • Configure un item maestro para la recopilación masiva de datos en un único JSON:

Observe el uso de macros en los campos de consulta. Consulte la API de Openweathermap para saber cómo completarlos.

Ejemplo de JSON devuelto en la respuesta al agent 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 items dependientes que extraigan datos del JSON.

  • Configure un item dependiente de ejemplo para la humedad:

Otros métricos meteorológicos, como 'Temperature', se añaden de la misma manera.

  • Ejemplo de preprocesamiento del valor de un item dependiente con JSONPath:

  • Compruebe el resultado de los datos meteorológicos en Latest data:

Ejemplo 5

Conexión a la página de estado de NGINX y obtención masiva de sus métricas.

  • Configure NGINX siguiendo la guía oficial.
  • Configure un item maestro 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 consiste en configurar los items dependientes que extraen los datos.

  • Configure un item dependiente de ejemplo para las solicitudes por segundo:

  • Preprocesamiento de ejemplo del valor de un item 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 Latest data: