Conexión entre el procesamiento de registros en la nube y en las instalaciones

Las arquitecturas modernas nativas de la nube requieren soluciones de procesamiento de registros robustas, escalables y seguras para monitorear aplicaciones distribuidas. Este estudio presenta una solución híbrida para la recolección, agregación y análisis de registros utilizando Azure Kubernetes Service (AKS) para la generación de registros, Fluent Bit para la recolección de registros, Azure EventHub para la agregación intermedia y Splunk implementado en un clúster de Apache CloudStack local para la indexación y visualización integral de registros.

Detallamos el diseño, la implementación y la evaluación del sistema, demostrando cómo esta arquitectura soporta el procesamiento de registros confiable y escalable para cargas de trabajo nativas de la nube mientras se mantiene el control sobre los datos en las instalaciones.

Introducción

Las soluciones de registro centralizado se han vuelto indispensables. Las aplicaciones modernas, particularmente aquellas construidas sobre arquitecturas de microservicios, generan enormes cantidades de registros, a menudo en formatos diversos y desde múltiples fuentes. Estos registros son la fuente clave para monitorear el rendimiento de la aplicación, diagnosticar problemas y garantizar la fiabilidad general del sistema. Sin embargo, gestionar volúmenes tan altos de datos de registro plantea desafíos significativos, especialmente en entornos de nube híbrida que abarcan tanto infraestructura local como basada en la nube.

Las soluciones de registro tradicionales, aunque efectivas para aplicaciones monolíticas, tienen dificultades para escalar ante las demandas de arquitecturas basadas en microservicios. La naturaleza dinámica de los microservicios, caracterizada por despliegues independientes y actualizaciones frecuentes, produce un flujo continuo de registros, cada uno variando en formato y estructura. Estos registros deben ser ingestados, procesados y analizados en tiempo real para proporcionar información accionable. Además, a medida que las aplicaciones operan cada vez más en entornos híbridos, garantizar la seguridad y los datos de información personal se vuelve primordial, dadas las variadas exigencias de cumplimiento normativo.

Este documento presenta una solución integral que aborda estos desafíos aprovechando las capacidades combinadas de Azure y los recursos de Apache CloudStack. Al integrar la escalabilidad y capacidades analíticas de Azure con la flexibilidad y rentabilidad de la infraestructura local de CloudStack, esta solución ofrece un enfoque unificado y sólido para el registro centralizado.

Revisión de la literatura

La recopilación centralizada de registros en microservicios enfrenta desafíos como la latencia de red, los diversos formatos de datos y la seguridad en múltiples capas. Si bien agentes ligeros como Fluent Bit y FluentD son ampliamente utilizados, el transporte eficiente de registros sigue siendo un desafío.

Soluciones como el stack ELK y Azure Monitor ofrecen procesamiento de registros centralizado, pero típicamente implican implementaciones solo en la nube o solo en las instalaciones, limitando la flexibilidad en los despliegues híbridos. Las soluciones de nube híbrida permiten a las organizaciones aprovechar la escalabilidad de la nube mientras mantienen el control sobre datos sensibles en entornos locales. Los pipelines de procesamiento de registros híbridos, especialmente aquellos que utilizan tecnologías de transmisión de eventos, abordan la necesidad de transporte y agregación de registros escalables.

Arquitectura del Sistema

La arquitectura, ilustrada a continuación, integra Azure EventHub y AKS con Apache CloudStack y Splunk en las instalaciones. Cada componente está optimizado para un procesamiento de registros eficiente y transferencia de datos segura a través de entornos. 

 

Descripciones de Componentes

  • AKS: Aloja aplicaciones en contenedores y genera registros accesibles a través de la capa de agregación de registros de Kubernetes.
  • Fluent Bit: Desplegado como un DaemonSet, recopila registros de los nodos de AKS. Cada instancia de Fluent Bit captura registros de /var/log/containers, los filtra y los reenvía en formato JSON a EventHub.
  • Azure EventHub: Actúa como un corredor de mensajes de alto rendimiento, agregando registros de Fluent Bit y almacenándolos temporalmente hasta que sean recuperados por el Splunk Heavy Forwarder.
  • Apache Kafka: Actúa como un puente confiable entre Fluent Bit y Splunk. Fluent Bit reenvía registros a Kafka utilizando su plugin de salida de Kafka, donde los registros se almacenan y procesan temporalmente. Splunk luego consume los registros de Kafka utilizando conectores como el Kafka Connect Splunk Sink o scripts personalizados, asegurando una arquitectura escalable y desacoplada.
  • Splunk Heavy Forwarder (HF): Instalado en Apache CloudStack, el Heavy Forwarder recupera registros de Azure EventHub utilizando el Splunk Add-on for Microsoft Cloud Services. Este complemento proporciona una integración fluida, permitiendo que el Heavy Forwarder se conecte de manera segura a EventHub, recupere registros en casi tiempo real y los transforme según sea necesario antes de reenviarlos al indexador de Splunk para su almacenamiento y procesamiento
  • Splunk en Apache CloudStack: Proporciona indexación de registros, búsqueda, visualización y alertas.

Flujo de Datos

  1. Recolección de registros en AKS: Fluent Bit sigue los archivos de registro en /var/log/containers, filtrando registros innecesarios y etiquetando cada registro con metadatos (por ejemplo, nombre del contenedor, espacio de nombres).
  2. Reenvío a EventHub: Los registros se envían a EventHub a través de HTTPS utilizando el plugin de salida azure_eventhub de Fluent Bit, asegurando una transmisión de datos segura.
  3. Apache Kafka: Los registros de AKS son recopilados por Fluent Bit, que se ejecuta como un DaemonSet, el cual los analiza y los envía a Apache Kafka a través de su plugin de salida de Kafka. Kafka actúa como un búfer de alto rendimiento, almacenando y particionando los registros para escalabilidad. Splunk ingiere estos registros desde Kafka utilizando conectores o scripts, permitiendo indexación, análisis y monitoreo en tiempo real.
  4. Extracción de registros con Splunk Heavy Forwarder: El Forwarder Pesado en Apache CloudStack se conecta a EventHub utilizando el SDK de EventHubs y extrae registros, enviándolos al indexador local de Splunk para almacenamiento y procesamiento.
  5. Almacenamiento y análisis en Splunk: Los registros son indexados en Splunk, permitiendo búsquedas en tiempo real, visualizaciones de paneles y alertas basadas en patrones de registro.

Metodología

Implementación del DaemonSet de Fluent Bit en AKS

La configuración de Fluent Bit se almacena en un ConfigMap e implementa como un DaemonSet. A continuación se muestra la configuración detallada para el DaemonSet de Fluent Bit:

Lua

 

Name:         fluentbit-cm
Namespace:    fluentbit
Labels:       k8s-app=fluentbit
Annotations:  
Data
crio-logtag.lua:
local reassemble_state = {}
function reassemble_cri_logs(tag, timestamp, record)
  -- Validar el registro entrante
  if not record or not record.logtag or not record.log or type(record.log) == 'table' then
    return 0, timestamp, record
  end
  -- Generar una clave única para el reensamblaje basada en el flujo y la etiqueta
  local reassemble_key = (record.stream or "unknown_stream") .. "::" .. tag
  -- Manejar fragmentos de registro (logtag == 'P')
  if record.logtag == 'P' then
    -- Almacenar el fragmento en el estado de reensamblaje
    reassemble_state[reassemble_key] = (reassemble_state[reassemble_key] or "") .. record.log
    return -1, 0, 0 -- Do not forward this fragment
  end
  -- Manejar el final de un registro fragmentado
  if reassemble_state[reassemble_key] then
    -- Combinar fragmentos almacenados con el registro actual
    record.log = (reassemble_state[reassemble_key] or "") .. (record.log or "")
    -- Limpiar el estado almacenado para esta clave
    reassemble_state[reassemble_key] = nil
    return 1, timestamp, record -- Forward the reassembled log
  end
  -- Si no se necesita reensamblaje, enviar el registro tal cual
  return 0, timestamp, record
end
INCLUDE filter-kubernetes.conf
filter-kubernetes.conf:
[FILTER]
    Name kubernetes
    Match test.app.splunk.*
    Kube_URL https://kubernetes.default.svc:443
    Kube_CA_File /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    Kube_Token_File /var/run/secrets/kubernetes.io/serviceaccount/token
    Kube_Tag_Prefix test.app.splunk.var.log.containers
    Merge_Log On
    Merge_Log_Key log_processed
    K8S-Logging.Parser On
    K8S-Logging.Exclude On
    Labels Off
    Annotations Off
    Keep_Log Off
 
fluentbit.conf:
[SERVICE]
    Flush         1
    Log_Level     info
    Daemon        on
    Parsers_File  parsers.conf
    HTTP_Server   On
    HTTP_Listen   0.0.0.0
    HTTP_Port     2020
    Health_Check On 
    HC_Errors_Count 1
    HC_Retry_Failure_Count 1 
    HC_Period 5    

INCLUDE input-kubernetes.conf
INCLUDE output-kafka.conf

input-kubernetes.conf:
[INPUT]
    Name           tail
    Tag              test.app.splunk*
    Alias            test.app.splunk-input
    Path              /var/log/containers/*test.app.splunk.log
    Parser            cri
    DB                /var/log/flb_kube.db
    Buffer_Chunk_Size 256K
    Buffer_Max_Size   24MB
    Mem_Buf_Limit     1GB
    Skip_Long_Lines   On
    Refresh_Interval  5

output-kafka.conf:
[OUTPUT]
    Name           kafka
    Alias             test.app.splunk-output
    Match             test.app.splunk.*
    Brokers            prod-region-logs-premium.servicebus.windows.net:9094
    Topics            test.app.splunk
    Retry_Limit       5
    rdkafka.security.protocol SASL_SSL
    rdkafka.sasl.mechanism    PLAIN
    rdkafka.sasl.username     $ConnectionString
    rdkafka.sasl.password      Endpoint=sb://prod-region-logs-premium.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=***********************************************=
[OUTPUT]

parsers.conf:
[PARSER]
    Name         cri
    Format       regex
    Regex        ^(?

  • La sección especifica la recopilación de registros desde el directorio /var/log/containers.
  • La sección de filtro enriquece los registros con metadatos de Kubernetes.
  • La sección de salida configura Fluent Bit para enviar registros a EventHub en formato JSON.

Configuración de Azure EventHub

EventHub requiere un espacio de nombres, una instancia específica de EventHub y control de acceso a través de políticas de acceso compartido.

  • Configuración de espacio de nombres y EventHub: Cree un espacio de nombres e instancia de EventHub en Azure, establezca una política de envío y recupere la cadena de conexión.
  • Configuración para alto rendimiento: EventHub se configura con un alto conteo de particiones para soportar escalabilidad, almacenamiento en búfer y flujos de datos concurrentes desde Fluent Bit.

Configuración de Splunk Heavy Forwarder en Apache CloudStack

Splunk Heavy Forwarder recupera registros de EventHub y los envía al indexador de Splunk.

  • Complemento para Servicios en la Nube de Microsoft: Instale el complemento para habilitar la conectividad con EventHub. Configure la entrada en inputs.conf:
Lua

 

[azure_eventhub://eventhub_name]
index = <index_name>
eventhub_namespace = <namespace>
shared_access_key_name = <access_key_name>
shared_access_key = <access_key>
batch_size = 500
interval = 30
sourcetype = _json
disabled = 0

  • Procesamiento por lotes: Establezca el tamaño de lote en 500 e intervalo en 30 segundos para optimizar la ingestión de datos y reducir la frecuencia de llamadas de red.

Indexación y Visualización en Splunk

  • Enriquecimiento de datos: Los registros se enriquecen con metadatos adicionales en Splunk mediante extracciones de campos.
  • Búsquedas y paneles: Las consultas SPL permiten búsquedas en tiempo real, y los paneles personalizados proporcionan visualización de patrones de registro.
  • Alertas: Se configuran alertas para activarse en patrones de registro específicos, como altas tasas de errores o advertencias repetidas de contenedores específicos.

Rendimiento y escalabilidad

Las pruebas muestran que el sistema puede manejar la ingestión de registros a alto rendimiento, con las capacidades de almacenamiento en búfer de EventHub que evitan la pérdida de datos durante interrupciones de red. El uso de recursos de Fluent Bit en nodos de AKS sigue siendo mínimo, y el indexador de Splunk maneja el volumen de registros de manera eficiente con configuraciones adecuadas de indexación y filtrado.

Seguridad

Se utiliza HTTPS para asegurar la comunicación entre AKS y EventHub, mientras que Splunk HF utiliza claves seguras para autenticarse con EventHub. Cada componente en el pipeline implementa mecanismos de reintento para mantener la integridad de los datos.

Utilización de Recursos

  • Fluent Bit promedia 100-150 MiB de memoria y 0.2-0.3 CPU en nodos de AKS.
  • El uso de recursos de EventHub se ajusta dinámicamente según las configuraciones de partición y rendimiento.
  • La carga de Splunk HF se equilibra a través del procesamiento por lotes, optimizando la transferencia de datos sin sobrecargar los recursos de Apache CloudStack.

Confiabilidad y tolerancia a fallos

La solución utiliza el almacenamiento en búfer de EventHub para asegurar la retención de registros en caso de fallos posteriores. EventHub también admite políticas de reintento, mejorando aún más la integridad y confiabilidad de los datos.

Discusión

Ventajas de la Arquitectura de Nube Híbrida

Esta arquitectura proporciona flexibilidad, escalabilidad y seguridad al combinar servicios de Azure con control local. También aprovecha las capacidades de transmisión y almacenamiento en la nube sin comprometer la soberanía de los datos.

Limitaciones

Aunque EventHub ofrece una agregación de datos confiable, los costos aumentan con las unidades de rendimiento, por lo que es esencial optimizar las configuraciones de reenvío de registros. Además, la transferencia de datos entre entornos en la nube y locales introduce posibles latencias.

Aplicaciones Futuras

Esta arquitectura podría ser ampliada integrando aprendizaje automático para la detección de anomalías en registros o añadiendo soporte para múltiples proveedores de nube para escalar aún más el procesamiento de registros y la resiliencia multi-nube.

Conclusión

Este estudio demuestra la efectividad de un pipeline de procesamiento de registros híbrido aprovechando recursos en la nube y locales. Al integrar Azure Kubernetes Service (AKS), Azure EventHub y Splunk en Apache CloudStack, creamos una solución escalable y resiliente para la gestión y análisis centralizados de registros. La arquitectura aborda desafíos clave en el registro distribuido, incluyendo alto rendimiento de datos, seguridad y tolerancia a fallos.

El uso de Fluent Bit como un recolector de registros ligero en AKS garantiza una recopilación eficiente de datos con un mínimo gasto de recursos. Las capacidades de almacenamiento en búfer de Azure EventHub permiten una agregación de registros confiable y almacenamiento temporal, lo que lo hace adecuado para manejar el tráfico variable de registros y mantener la integridad de los datos en caso de problemas de conectividad. El Splunk Heavy Forwarder y la implementación de Splunk en Apache CloudStack permiten a las organizaciones mantener el control sobre el almacenamiento y análisis de registros, al mismo tiempo que se benefician de la escalabilidad y flexibilidad de los recursos en la nube.

Este enfoque ofrece ventajas significativas para las organizaciones que requieren una configuración de nube híbrida, como un mayor control sobre los datos, el cumplimiento de los requisitos de residencia de datos y la flexibilidad para escalar según la demanda. Trabajos futuros pueden explorar la integración del aprendizaje automático para mejorar el análisis de registros, la detección automatizada de anomalías y la expansión a una configuración de múltiples nubes para aumentar la resiliencia y versatilidad. Esta investigación proporciona una arquitectura fundamental adaptable a las necesidades cambiantes de los sistemas modernos y distribuidos en entornos empresariales.

Referencias 

Azure Event Hubs y Kafka

Monitoreo y registro híbrido

  • Patrones de supervisión de nube híbrida y multi-nube
  • Estrategias de supervisión de nube híbrida

Integración de Splunk

  • Envío de datos de Azure a Splunk
  • Datos de Azure en la plataforma de Splunk

Implementación de AKS

Source:
https://dzone.com/articles/bridging-cloud-and-on-premises-log-processing