A introdução de fluxos de dados no Elasticsearch, a partir da versão 7.9 e consolidada na versão 8, trouxe um novo paradigma para o gerenciamento de dados temporais, visando reduzir a sobrecarga e otimizar o armazenamento e processamento de séries temporais. Esses fluxos de dados permitem uma maneira mais eficiente de gerenciar e ingerir grandes volumes de dados temporais, ao contrário dos índices tradicionais.

O conceito central por trás dos fluxos de dados é o armazenamento e a gestão automática de eventos temporais, o que facilita a manipulação e análise desses dados com menos esforço manual. Isso significa que, ao contrário dos índices regulares, onde cada novo conjunto de dados pode criar um novo índice, os fluxos de dados utilizam um único recurso para armazenar dados que são automaticamente gerenciados por políticas de ciclo de vida, como a exclusão ou a rotação dos dados. Desde a versão 8.0, todos os Beats, como o Metricbeat, passaram a armazenar eventos diretamente em fluxos de dados ao invés de índices.

Em cenários onde não é possível usar Beats ou o Elastic Agent para ingestão de dados, é possível configurar manualmente um fluxo de dados no Elasticsearch. A configuração manual envolve a criação de uma política de ciclo de vida de índice (ILM), que permite gerenciar os dados automaticamente, como definir quando os dados serão movidos para o próximo estágio (como "quente", "frio") ou excluídos após um determinado período.

Um exemplo prático dessa configuração envolve o uso de um conjunto de dados públicos, como o dataset de tráfego em tempo real da cidade de Rennes, França, acessado através de plataformas públicas como o Portal de Dados Europeu. Esse conjunto de dados contém informações detalhadas sobre o status do tráfego, com metadados ricos que podem ser utilizados para aprender como ingerir e transformar dados temporais, bem como visualizar e explorar esses dados em ferramentas como o Kibana.

A configuração do fluxo de dados envolve algumas etapas cruciais. Primeiramente, cria-se uma política de ciclo de vida de índice (ILM), que define regras para o armazenamento e rotação dos dados com base em critérios como o tamanho do shard ou a idade dos dados. No exemplo dado, a política é configurada para realizar um "rollover" do shard primário quando ele atingir 50 GB, e para excluir os dados após 30 dias.

Depois, é necessário preparar o template de índice, que inclui definições de mapeamentos e configurações de ILM. O mapeamento é uma estrutura que define como os campos do conjunto de dados, como a data e o status do tráfego, serão tratados dentro do Elasticsearch. Um exemplo de mapeamento inclui a definição do tipo de campo, como "date" para o campo de timestamp e "keyword" para campos como o status do tráfego. Além disso, a definição de geo-pontos para os dados de localização é essencial para permitir que o Elasticsearch execute consultas espaciais eficientes sobre esses dados.

Com a política de ILM e o template de índice configurados, o próximo passo é ingestão dos dados. Isso pode ser feito utilizando scripts Python para enviar os dados do tráfego para o Elasticsearch, onde eles são automaticamente armazenados no fluxo de dados definido. A verificação da ingestão pode ser feita através da interface do Kibana, permitindo que o usuário confirme se os dados foram corretamente armazenados e visualizados, utilizando painéis de análise como o "Discover" no Kibana.

O uso de fluxos de dados é particularmente vantajoso quando lidamos com dados em tempo real ou que necessitam de retenção por um período determinado. A utilização de políticas como o rollover e a exclusão automática de dados evita que os índices cresçam indefinidamente, proporcionando um gerenciamento mais eficiente do armazenamento.

Além disso, vale ressaltar a importância do uso de templates compostos, que combinam os templates de mapeamento e configuração do ciclo de vida de índice. Isso assegura que todos os aspectos da ingestão de dados, desde o mapeamento dos campos até as políticas de retenção, estejam adequadamente configurados, permitindo uma ingestão e análise de dados sem interrupções.

Ao seguir esse processo, será possível ingerir dados de diferentes fontes em fluxos de dados personalizados, com a flexibilidade de definir como os dados serão manipulados e retidos ao longo do tempo, além de garantir que sua análise seja feita de forma eficiente e escalável.

Como monitorar ambientes Kubernetes com o Elastic Agent e OpenTelemetry

O Elastic Stack oferece integração nativa com o protocolo OpenTelemetry (OTLP), permitindo coletar rastreamentos, métricas e logs de aplicativos instrumentados com agentes OpenTelemetry. Esses dados são enviados ao coletor, que utiliza o exportador otlp/elastic para encaminhá-los para o servidor APM. Essa configuração pode ser detalhada no arquivo values.yaml, onde as exportações são configuradas conforme o exemplo abaixo:

yaml
config:
exporters: otlp/elastic: endpoint: ${ELASTIC_APM_ENDPOINT} compression: none headers: Authorization: Bearer ${ELASTIC_APM_SECRET_TOKEN}

Esse fluxo de dados oferece uma solução poderosa para a observabilidade do ambiente, permitindo que o Elastic Stack colete, processe e visualize de maneira eficiente os dados sobre o desempenho da aplicação e a infraestrutura. Embora seja possível que os agentes OpenTelemetry enviem dados diretamente para o Elastic Stack, essa configuração simplificada é recomendada apenas para implementações iniciais ou quando a instrumentação de um único aplicativo precisa ser realizada rapidamente. Para ambientes de produção, o uso do coletor é considerado uma prática recomendada. Isso se deve ao fato de que o coletor melhora o desempenho e a eficiência, processando e agregando os dados antes de enviá-los aos sistemas de monitoramento, o que reduz a carga sobre esses sistemas e minimiza o uso de rede.

Uma abordagem complementar é o uso do OpenTelemetry Bridge, oferecido pela Elastic, que é uma combinação de API/SDK e agentes Elastic APM. Este método traduz as chamadas da API OpenTelemetry em chamadas para a API Elastic APM. Atualmente, essa funcionalidade está disponível para tecnologias como Java, .NET, Node.js e Python, oferecendo benefícios como a reutilização da instrumentação existente para gerar dados de APM e a capacidade de integrar várias tecnologias.

Quando falamos sobre monitoramento de ambientes Kubernetes, a estratégia pode ser expandida para incluir a coleta de métricas e logs da infraestrutura, com o objetivo de obter uma visão mais detalhada tanto sobre o desempenho das aplicações quanto sobre a saúde da infraestrutura subjacente. Isso pode ser realizado por meio da instalação e configuração de um Elastic Agent com integração ao Kubernetes.

O processo de implementação começa com a instalação do Elastic Agent no cluster Kubernetes, conforme mostrado abaixo:

  1. No Kibana, acesse a seção Management | Fleet e clique em Add agent.

  2. Na tela seguinte, clique em Create new agent policy, nomeie a política como kubernetes-policy e crie a política.

  3. Em seguida, selecione a aba Kubernetes para baixar o arquivo de manifesto. Esse arquivo será aplicado no seu cluster Kubernetes com o comando:

    bash
    kubectl apply -f elastic-agent-managed-kubernetes.yml

Uma vez que o agente esteja registrado e transmitindo dados, o próximo passo é integrar o monitoramento do Kubernetes, que exige a instalação do serviço kube-state-metrics. Este serviço escuta a API do Kubernetes e gera métricas sobre o estado dos objetos, fundamentais para a funcionalidade da integração com o Kubernetes. Caso o serviço não esteja presente, ele pode ser instalado com os seguintes comandos:

bash
git clone https://github.com/kubernetes/kube-state-metrics.git kube-state-metrics kubectl apply -f kube-state-metrics/examples/standard

Depois de garantir que o kube-state-metrics está em execução, retorne ao Kibana para adicionar a integração do Kubernetes. O processo de adição da integração é simples, e você pode seguir os passos na interface para vincular essa integração à política do Elastic Agent.

Uma vez configurado, o Elastic Stack começará a coletar dados e gerar dashboards detalhados sobre o estado do cluster. Por exemplo, o painel [Metrics Kubernetes] Cluster Overview oferece informações sobre os nós, o uso de memória e os objetos em execução no cluster. Já o painel [Metrics Kubernetes] Pods fornece uma visão detalhada sobre o uso de recursos dos pods, como CPU, memória e rede.

É importante notar que a Elastic oferece dashboards predefinidos e outras ferramentas para auxiliar na análise dos dados coletados. Estes dashboards são fundamentais para obter uma visão abrangente e detalhada do estado do Kubernetes, facilitando a identificação de problemas e melhorando a capacidade de resposta a incidentes.

Além disso, é necessário compreender que o monitoramento da infraestrutura e dos serviços de um ambiente Kubernetes vai além da simples visualização de métricas. Para uma observabilidade eficiente, é crucial considerar a segurança e a integridade dos dados coletados, principalmente em ambientes de produção. A utilização de boas práticas na configuração da coleta e no tratamento das métricas garante não só a performance dos sistemas, mas também a confiança nas informações que são analisadas.