Arquiteturas modernas nativas da nuvem exigem soluções robustas, escaláveis e seguras de processamento de logs para monitorar aplicações distribuídas. Este estudo apresenta uma solução híbrida para coleta, agregação e análise de logs utilizando o Azure Kubernetes Service (AKS) para geração de logs, Fluent Bit para coleta de logs, Azure EventHub para agregação intermediária e Splunk implantado em um cluster Apache CloudStack local para indexação e visualização abrangente de logs.
Detalhamos o design, a implementação e a avaliação do sistema, demonstrando como essa arquitetura suporta o processamento de logs confiável e escalável para cargas de trabalho nativas da nuvem, mantendo o controle sobre os dados no local.
Introdução
Soluções de logging centralizado tornaram-se indispensáveis. Aplicações modernas, particularmente aquelas construídas em arquiteturas de microsserviços, geram grandes quantidades de logs, muitas vezes em formatos diversos e de múltiplas fontes. Esses logs são a principal fonte para monitorar o desempenho da aplicação, diagnosticar problemas e garantir a confiabilidade geral do sistema. No entanto, gerenciar volumes tão altos de dados de log apresenta desafios significativos, especialmente em ambientes de nuvem híbrida que abrangem tanto infraestrutura local quanto baseada na nuvem.
Soluções tradicionais de registro, embora eficazes para aplicações monolíticas, têm dificuldade em escalar sob as demandas de arquiteturas baseadas em microsserviços. A natureza dinâmica dos microsserviços, caracterizada por implantações independentes e atualizações frequentes, produz um fluxo contínuo de logs, cada um variando em formato e estrutura. Esses logs devem ser ingeridos, processados e analisados em tempo real para fornecer insights acionáveis. Além disso, à medida que as aplicações operam cada vez mais em ambientes híbridos, garantir a segurança e os dados de PII se torna fundamental, dado os variados requisitos de conformidade e regulação.
Este artigo apresenta uma solução abrangente que aborda esses desafios ao aproveitar as capacidades combinadas dos recursos do Azure e Apache CloudStack. Ao integrar a escalabilidade e as capacidades analíticas do Azure com a flexibilidade e a relação custo-benefício da infraestrutura local do CloudStack, esta solução oferece uma abordagem robusta e unificada para o registro centralizado.
Revisão da Literatura
A coleta centralizada de logs em microsserviços enfrenta desafios como latência de rede, formatos de dados diversos e segurança em múltiplas camadas. Embora agentes leves como Fluent Bit e FluentD sejam amplamente utilizados, o transporte eficiente de logs continua sendo um desafio.
Soluções como o ELK stack e o Azure Monitor oferecem processamento de log centralizado, mas tipicamente envolvem implementações apenas na nuvem ou apenas local, limitando a flexibilidade em implantações híbridas. As soluções de nuvem híbrida permitem que as organizações aproveitem a escalabilidade da nuvem mantendo o controle sobre dados sensíveis em ambientes locais. Os pipelines de processamento de log híbrido, especialmente aqueles que utilizam tecnologias de streaming de eventos, atendem à necessidade de transporte e agregação de log escalável.
Arquitetura do Sistema
A arquitetura, ilustrada abaixo, integra o Azure EventHub e o AKS com o Apache CloudStack e o Splunk locais. Cada componente é otimizado para processamento de log eficiente e transferência segura de dados entre os ambientes.
Descrições dos Componentes
- AKS: Hospeda aplicativos em contêineres e gera logs acessíveis através da camada de agregação de log do Kubernetes.
- Fluent Bit: Implementado como um DaemonSet, coleta logs dos nós AKS. Cada instância do Fluent Bit captura logs de /var/log/containers, filtra-os e os encaminha em formato JSON para o EventHub.
- Azure EventHub: Serve como um corretor de mensagens de alto rendimento, agregando logs do Fluent Bit e armazenando-os temporariamente até serem recuperados pelo Splunk Heavy Forwarder.
- Apache Kafka: Atua como uma ponte confiável entre o Fluent Bit e o Splunk. O Fluent Bit encaminha logs para o Kafka usando seu plugin de saída Kafka, onde os logs são armazenados e processados temporariamente. O Splunk então consome os logs do Kafka usando conectores como o Kafka Connect Splunk Sink ou scripts personalizados, garantindo uma arquitetura escalável e desacoplada.
- Splunk Heavy Forwarder (HF): Instalado no Apache CloudStack, o Heavy Forwarder recupera logs do Azure EventHub usando o Complemento Splunk para Serviços de Nuvem da Microsoft. Este complemento fornece uma integração perfeita, permitindo que o Heavy Forwarder se conecte de forma segura ao EventHub, recupere logs em tempo quase real e os transforme conforme necessário antes de encaminhá-los para o indexador do Splunk para armazenamento e processamento
- Splunk no Apache CloudStack: Fornece indexação de logs, pesquisa, visualização e alerta.
Fluxo de Dados
- Coleta de logs no AKS: O Fluent Bit monitora arquivos de log em /var/log/containers, filtrando logs desnecessários e marcando cada log com metadados (por exemplo, nome do contêiner, namespace).
- Encaminhamento para o EventHub: Os logs são enviados para o EventHub via HTTPS usando o plugin de saída azure_eventhub do Fluent Bit, garantindo transmissão segura de dados.
- Apache Kafka: Os logs do AKS são coletados pelo Fluent Bit, que roda como um DaemonSet, que analisa e os encaminha para o Apache Kafka através de seu plugin de saída Kafka. O Kafka atua como um buffer de alta capacidade, armazenando e particionando logs para escalabilidade. O Splunk ingere esses logs do Kafka usando conectores ou scripts, permitindo indexação, análise e monitoramento em tempo real.
- Coletando logs com Splunk Heavy Forwarder: O Heavy Forwarder no Apache CloudStack conecta-se ao EventHub usando o SDK do EventHubs e puxa logs, encaminhando-os para o indexador local do Splunk para armazenamento e processamento.
- Armazenamento e análise no Splunk: Os logs são indexados no Splunk, permitindo buscas em tempo real, visualizações de painel e alertas baseados em padrões de log.
Metodologia
Implantação do DaemonSet do Fluent Bit no AKS
A configuração do Fluent Bit é armazenada em um ConfigMap e implantada como um DaemonSet. Abaixo está a configuração expandida para o DaemonSet do Fluent Bit:
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 o registro de entrada
if not record or not record.logtag or not record.log or type(record.log) == 'table' then
return 0, timestamp, record
end
-- Gerar uma chave única para reassemblagem com base no fluxo e na tag
local reassemble_key = (record.stream or "unknown_stream") .. "::" .. tag
-- Tratar fragmentos de log (logtag == 'P')
if record.logtag == 'P' then
-- Armazenar o fragmento no estado de reassemblagem
reassemble_state[reassemble_key] = (reassemble_state[reassemble_key] or "") .. record.log
return -1, 0, 0 -- Do not forward this fragment
end
-- Tratar o final de um log fragmentado
if reassemble_state[reassemble_key] then
-- Combinar fragmentos armazenados com o log atual
record.log = (reassemble_state[reassemble_key] or "") .. (record.log or "")
-- Limpar o estado armazenado para esta chave
reassemble_state[reassemble_key] = nil
return 1, timestamp, record -- Forward the reassembled log
end
-- Se nenhuma reassemblagem for necessária, encaminhar o log como está
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 ^(?
- A seção especifica a coleta de logs do diretório /var/log/containers.
- A seção de filtro enriquece logs com metadados do Kubernetes.
- A seção de saída configura o Fluent Bit para encaminhar logs para o EventHub no formato JSON.
Configuração do Azure EventHub
O EventHub requer um namespace, uma instância específica do EventHub e controle de acesso por meio de políticas de acesso compartilhado.
- Configuração de Namespace e EventHub: Crie um namespace e uma instância do EventHub no Azure, defina uma política de envio e recupere a string de conexão.
- Configuração para alto rendimento: O EventHub é configurado com um alto número de partições para suportar escalabilidade, bufferização e fluxos de dados concorrentes do Fluent Bit.
Configuração do Splunk Heavy Forwarder no Apache CloudStack
O Splunk Heavy Forwarder recupera logs do EventHub e os encaminha para o indexador do Splunk.
- Complemento para Serviços em Nuvem da Microsoft: Instale o complemento para habilitar a conectividade com o EventHub. Configure a entrada em
inputs.conf
:
[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
- Processamento em lote: Defina o batch_size para 500 e o intervalo para 30 segundos para otimizar a ingestão de dados e reduzir a frequência de chamadas de rede.
Indexação e Visualização do Splunk
- Enriquecimento de dados: Os logs são enriquecidos com metadados adicionais no Splunk usando extrações de campo.
- Buscas e painéis: As consultas SPL permitem buscas em tempo real, e os painéis personalizados fornecem visualização de padrões de log.
- Alerta: Os alertas são configurados para disparar em padrões de log específicos, como altas taxas de erro ou alertas repetidos de contêineres específicos.
Desempenho e Escalabilidade
Os testes mostram que o sistema pode lidar com a ingestão de logs de alta taxa, com as capacidades de buffer do EventHub evitando a perda de dados durante interrupções de rede. O uso de recursos do Fluent Bit nos nós AKS permanece mínimo, e o indexador do Splunk lida eficientemente com o volume de logs com configurações apropriadas de indexação e filtragem.
Segurança
O HTTPS é usado para garantir a comunicação entre AKS e EventHub, enquanto o Splunk HF usa chaves seguras para autenticar com o EventHub. Cada componente no pipeline implementa mecanismos de tentativa para manter a integridade dos dados.
Utilização de Recursos
- O Fluent Bit tem uma média de 100-150 MiB de memória e 0.2-0.3 CPU nos nós AKS.
- O uso de recursos do EventHub é ajustado dinamicamente com base nas configurações de partição e taxa de transferência.
- A carga do Splunk HF é balanceada por meio do processamento em lote, otimizando a transferência de dados sem sobrecarregar os recursos do Apache CloudStack.
Confiabilidade e Tolerância a Falhas
A solução utiliza o buffer do EventHub para garantir a retenção de logs em caso de falhas downstream. O EventHub também suporta políticas de tentativa, melhorando ainda mais a integridade e confiabilidade dos dados.
Discussão
Vantagens da Arquitetura de Nuvem Híbrida
Esta arquitetura oferece flexibilidade, escalabilidade e segurança ao combinar os serviços Azure com controle local. Também aproveita as capacidades de streaming e buffer baseadas em nuvem sem comprometer a soberania dos dados.
Limitações
Embora o EventHub ofereça uma agregação de dados confiável, os custos aumentam com as unidades de throughput, tornando essencial otimizar as configurações de encaminhamento de logs. Além disso, a transferência de dados entre ambientes em nuvem e locais pode introduzir latência potencial.
Aplicações Futuras
Esta arquitetura poderia ser estendida integrando aprendizado de máquina para detecção de anomalias em logs ou adicionando suporte para múltiplos provedores de nuvem para ampliar ainda mais o processamento de logs e a resiliência multicloud.
Conclusão
Este estudo demonstra a eficácia de um pipeline de processamento de logs híbrido que aproveita recursos em nuvem e locais. Ao integrar o Azure Kubernetes Service (AKS), Azure EventHub e Splunk no Apache CloudStack, criamos uma solução escalável e resiliente para gerenciamento e análise centralizados de logs. A arquitetura aborda desafios-chave em logging distribuído, incluindo alto throughput de dados, segurança e tolerância a falhas.
O uso do Fluent Bit como um coletor de logs leve no AKS garante uma coleta de dados eficiente com mínimo consumo de recursos. As capacidades de buffer do Azure EventHub permitem uma agregação de logs confiável e armazenamento temporário, tornando-o bem-sucedido em lidar com tráfego de logs variável e manter a integridade dos dados em caso de problemas de conectividade. O Splunk Heavy Forwarder e a implantação do Splunk no Apache CloudStack permitem que as organizações mantenham o controle sobre o armazenamento e a análise de logs, enquanto se beneficiam da escalabilidade e flexibilidade dos recursos em nuvem.
Essa abordagem oferece vantagens significativas para organizações que exigem uma configuração de nuvem híbrida, como maior controle sobre os dados, conformidade com requisitos de residência de dados e a flexibilidade de escalar com a demanda. Trabalhos futuros podem explorar a integração de aprendizado de máquina para aprimorar a análise de logs, detecção automatizada de anomalias e expansão para uma configuração multi-nuvem para aumentar a resiliência e versatilidade. Esta pesquisa fornece uma arquitetura fundamental adaptável às necessidades em evolução de sistemas modernos e distribuídos em ambientes corporativos.
Referências
Azure Event Hubs e Kafka
Monitoramento e Registro Híbrido
- Padrões de Monitoramento Híbrido e Multi-Nuvem
- Estrategias de Monitoramento em Nuvem Híbrida
Integração com Splunk
- Splunking Azure Event Hubs
- Dados do Azure na Plataforma Splunk
Implantação do AKS
Source:
https://dzone.com/articles/bridging-cloud-and-on-premises-log-processing