2 Transmisión a sistemas externos

Resumen

Es posible transmitir valores de item y eventos desde Zabbix a sistemas externos a través de HTTP (consulte los detalles del protocolo).

El filtro de etiquetas puede utilizarse para transmitir subconjuntos de valores de item o eventos.

Dos tipos de procesos de Zabbix server son responsables de la transmisión de datos: connector manager y connector worker. Un item interno de Zabbix zabbix[connector_queue] permite supervisar el número de valores encolados en la cola del conector.

Configuración

Se requieren los siguientes pasos para configurar el streaming de datos a un sistema externo:

1. Tener un sistema remoto configurado para recibir datos de Zabbix. Para este propósito, están disponibles las siguientes herramientas:

  • Un ejemplo de un receiver simple que registra la información recibida en los archivos events.ndjson y history.ndjson.
  • Conector Kafka para Zabbix server - un server ligero escrito en Go, diseñado para reenviar valores de item y eventos desde un Zabbix server a un broker de Kafka.

2. Establezca el número requerido de workers del conector en Zabbix ajustando el parámetro StartConnectors en zabbix_server.conf. El número de workers del conector debe coincidir (o ser mayor si las sesiones concurrentes son más de 1) con el número de conectores configurado en Zabbix frontend. Luego, reinicie Zabbix server.

3. Configure un nuevo conector en Zabbix frontend (Administration > General > Connectors) y recargue la caché del server con el comando zabbix_server -R config_cache_reload.

Los campos obligatorios están marcados con un asterisco.

Parameter Description
Name Introduzca el nombre del conector.
Data type Seleccione el tipo de datos que se transmitirá:
Item values - transmitir valores de item desde Zabbix a sistemas externos;
Events - transmitir eventos desde Zabbix a sistemas externos.
URL Introduzca la URL del receiver. Se admiten macros de usuario.
Tag filter Exporte solo valores de item o eventos que coincidan con el filtro de etiquetas. Si no se establece, se exportará todo.
Es posible incluir y excluir etiquetas específicas y valores de etiquetas específicos. Se pueden establecer varias condiciones. La coincidencia del nombre de la etiqueta siempre distingue entre mayúsculas y minúsculas.

Hay varios operadores disponibles para cada condición:
Exists - incluir los nombres de etiqueta especificados;
Equals - incluir los nombres y valores de etiqueta especificados (distingue entre mayúsculas y minúsculas);
Contains - incluir los nombres de etiqueta especificados cuando los valores de etiqueta contengan la cadena introducida (coincidencia de subcadena, sin distinguir entre mayúsculas y minúsculas);
Does not exist - excluir los nombres de etiqueta especificados;
Does not equal - excluir los nombres y valores de etiqueta especificados (distingue entre mayúsculas y minúsculas);
Does not contain - excluir los nombres de etiqueta especificados cuando los valores de etiqueta contengan la cadena introducida (coincidencia de subcadena, sin distinguir entre mayúsculas y minúsculas).

Hay dos tipos de cálculo para las condiciones:
And/Or - deben cumplirse todas las condiciones; las condiciones que tengan el mismo nombre de etiqueta se agruparán mediante la condición Or;
Or - basta con que se cumpla una condición.
Type of information Seleccione el tipo de información (numérico (sin signo), numérico (float), carácter, etc.) por el cual filtrar los valores de item que el conector debe transmitir.
Este campo está disponible si Data type está configurado como "Item values".
HTTP authentication Seleccione la opción de autenticación:
None - 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 (véase también: Configuring Kerberos with Zabbix);
Digest - se utiliza autenticación Digest;
Bearer - se utiliza autenticación Bearer.
Username Introduzca el nombre de usuario (hasta 255 caracteres). Se admiten macros de usuario.
Este campo está disponible si HTTP authentication está configurado como "Basic", "NTLM", "Kerberos" o "Digest".
Password Introduzca la contraseña del usuario (hasta 255 caracteres). Se admiten macros de usuario.
Este campo está disponible si HTTP authentication está configurado como "Basic", "NTLM", "Kerberos" o "Digest".
Bearer token Introduzca el token Bearer. Se admiten macros de usuario.
Este campo está disponible y es obligatorio si HTTP authentication está configurado como "Bearer".
Advanced configuration Haga clic en la etiqueta Advanced configuration para mostrar las opciones de configuración avanzada (véase más abajo).
Max records per message Especifique el número máximo de valores o eventos que pueden transmitirse dentro de un mensaje.
Concurrent sessions Seleccione el número de procesos emisores que se ejecutarán para este conector. Se pueden especificar hasta 100 sesiones; el valor predeterminado es "1".
Attempts Número de intentos para transmitir datos. Se pueden especificar hasta 5 intentos; el valor predeterminado es "1".
Attempt interval Especifique cuánto tiempo debe esperar el conector después de un intento fallido de transmitir datos. Se pueden especificar hasta 10s; el valor predeterminado es "5s".
Este campo está disponible si Attempts está configurado como "2" o más.
Los intentos fallidos son aquellos en los que no se pudo establecer una conexión, o en los que el código de respuesta HTTP no es 200, 201, 202, 203, 204. Los reintentos se activan en caso de errores de comunicación o cuando el código de respuesta HTTP no es 200, 201, 202, 203, 204, 400, 401, 403, 404, 405, 415, 422. Se siguen las redirecciones, por lo que 302 -> 200 es una respuesta positiva; mientras que 302 -> 503 activará un reintento.
Timeout Especifique el tiempo de espera del mensaje (1-60 segundos, predeterminado: 5 segundos).
Se admiten sufijos de tiempo, por ejemplo, 30s, 1m. Se admiten macros de usuario.
HTTP proxy Puede especificar un HTTP proxy para usar en el siguiente formato:
[protocol://][username[:password]@]proxy.example.com[:port]
Se admiten macros de usuario.

El prefijo opcional protocol:// puede utilizarse para especificar protocolos proxy alternativos (la compatibilidad con prefijos 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. De forma predeterminada, se utilizará el puerto 1080.

Si se especifica HTTP proxy, el proxy sobrescribirá variables de entorno relacionadas con proxy como http_proxy, HTTPS_PROXY. Si no se especifica, el proxy no sobrescribirá las variables de entorno relacionadas con proxy. El valor introducido se pasa tal cual, sin realizar ninguna comprobación de validez.
También puede introducir una dirección de proxy SOCKS. Si especifica un protocolo incorrecto, el conector no podrá transmitir valores de item o eventos desde Zabbix.

Tenga en cuenta que con HTTP proxy solo se admite autenticación simple.
SSL verify peer Marque la casilla para verificar el certificado SSL del servidor web.
El certificado del server se tomará automáticamente de la ubicación de la autoridad de certificación (CA) del sistema. Puede sobrescribir la ubicación de los archivos CA usando el parámetro de configuración de Zabbix server o proxy SSLCALocation.
SSL verify host Marque la casilla para verificar que coincida el campo Common Name o el campo Subject Alternate Name del certificado del servidor web.
Esto establece la opción cURL CURLOPT_SSL_VERIFYHOST.
SSL certificate file Nombre del archivo de certificado SSL utilizado para la autenticación del cliente. El archivo de certificado debe estar en formato PEM1. Se admiten macros de usuario.
Si el archivo de certificado también contiene la clave privada, deje vacío el campo SSL key file. Si la clave está cifrada, especifique la contraseña en el campo SSL key password. El directorio que contiene este archivo se especifica mediante el parámetro de configuración de Zabbix server o proxy SSLCertLocation.
SSL key file Nombre del archivo de clave privada SSL utilizado para la autenticación del cliente. El archivo de clave privada debe estar en formato PEM1. Se admiten macros de usuario.
El directorio que contiene este archivo se especifica mediante el parámetro de configuración de Zabbix server o proxy SSLKeyLocation.
SSL key password Contraseña del archivo de clave privada SSL. Se admiten macros de usuario.
Description Introduzca la descripción del conector.
Enabled Marque la casilla para habilitar el conector.

Cuando el conector Kafka está configurado con una lista separada por comas de direcciones de brokers bootstrap (por ejemplo, Kafka.URL=kafka1.example.com:9093,kafka2.example.com:9093), el cliente Kafka se conecta al broker o brokers que responden primero y utiliza sus metadatos del clúster. Si la lista contiene direcciones de diferentes clústeres Kafka, solo se utilizará el clúster que responda más rápido y las demás direcciones se registrarán como no disponibles; como resultado, pueden aparecer advertencias al iniciar como la siguiente aunque el conector esté conectado:

kafka cluster connected, but broker(s) "kafka1.example.com:9093, kafka2.example.com:9093" unavailable; will retry on message send if active brokers fail 

En algunos entornos (redes privadas, redes de contenedores o configuraciones no estándar de DNS/hosts), los nombres de host o las IP pueden resolverse a direcciones de loopback (por ejemplo 127.0.0.1/localhost) o ser normalizados por el cliente, lo que puede hacer que dichas advertencias resulten engañosas. Para reducir la confusión, asegúrese de que todas las direcciones Kafka.URL pertenezcan al mismo clúster Kafka, verifique la resolución DNS desde el host del conector y los advertised.listeners de los brokers, y prefiera direcciones que se resuelvan a la dirección anunciada del broker.

Protocolo

La comunicación entre el servidor y el receptor se realiza a través de HTTP utilizando REST API, NDJSON, "Content-Type: application/x-ndjson".

Para obtener más detalles, consulte el protocolo de exportación JSON delimitado por salto de línea.

Solicitud del servidor

Ejemplo de valores de elementos de transmisión:

POST /v1/historia HTTP/1.1
Anfitrión: localhost: 8080
Aceptar: */*
Aceptar codificación: deflate, gzip, br, zstd
Longitud del contenido: 628
Tipo de contenido: aplicación/x-ndjson

{"host":{"host":"servidor Zabbix","name":"servidor Zabbix"},"groups":["servidores Zabbix"],"item_tags":[{"tag":"foo", "valor":"prueba"}],"itemid":44457,"nombre":"foo","reloj":1673454303,"ns":800155804,"valor":0,"tipo":3}
{"host":{"host":"servidor Zabbix","name":"servidor Zabbix"},"groups":["servidores Zabbix"],"item_tags":[{"tag":"foo", "valor":"prueba"}],"itemid":44457,"nombre":"foo","reloj":1673454303,"ns":832290669,"valor":1,"tipo":3}
{"host":{"host":"servidor Zabbix","name":"servidor Zabbix"},"groups":["servidores Zabbix"],"item_tags":[{"tag":"bar", "valor":"prueba"}],"itemid":44458,"nombre":"bar","reloj":1673454303,"ns":867770366,"valor":123,"tipo":3}

Ejemplo de eventos de streaming:

POST /v1/eventos HTTP/1.1
Anfitrión: localhost: 8080
Aceptar: */*
Aceptar codificación: deflate, gzip, br, zstd
Longitud del contenido: 333
Tipo de contenido: aplicación/x-ndjson

{"clock":1673454303,"ns":800155804,"value":1,"eventid":5,"name":"activador para que foo sea 0","severity":0,"hosts":[{" host":"servidor Zabbix","name":"servidor Zabbix"}],"groups":["servidores Zabbix"],"tags":[{"tag":"foo_trig","value":"test "},{"tag":"foo","valor":"prueba"}]}
{"reloj":1673454303,"ns":832290669,"valor":0,"eventid":6,"p_eventid":5}
Respuesta del receptor

La respuesta consta del código de estado de la respuesta HTTP y la carga útil JSON. El código de estado de la respuesta HTTP debe ser "200", "201", "202", "203" o "204" para las solicitudes que se hayan procesado correctamente; cualquier otro indica solicitudes fallidas.

Ejemplo de éxito:

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
Date: Tue, 21 Apr 2026 10:13:04 GMT
Content-Length: 23

{"response":"success"}

Ejemplo con errores:

HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
X-Content-Type-Options: nosniff
Date: Tue, 21 Apr 2026 12:15:01 GMT
Content-Length: 55

{"error":"invalid character '{' after top-level value"}