Marcio Cunha

Monitoramento de Clusters Kubernetes com Prometheus, Thanos e Armazenamento de Longo Prazo

Descubra como estruturar o monitoramento de clusters Kubernetes usando Prometheus e Thanos para superar limites de retenção de métricas e unificar dados de múltiplos ambientes.

Marcio Cunha•7 min
Também disponível em:EnglishEspañol
Resumo
  • O Prometheus armazena métricas de forma eficiente localmente, mas sofre com limites rígidos de armazenamento e falhas quando o disco enche.
  • O Thanos resolve a fragmentação conectando múltiplos servidores Prometheus a um armazenamento central de baixo custo na nuvem.
  • A arquitetura baseada em sidecars e componentes sem estado permite consultas globais sem comprometer a estabilidade dos nós monitorados.
  • Políticas de compactação e downsampling reduzem o consumo de rede e disco ao mesclar dados antigos em resoluções menores.
  • A operação em larga escala exige planejamento rigoroso de replicação, controle de acesso e estratégias de backup para evitar perda de observabilidade.

O Desafio de Monitorar Ambientes Distribuídos no Kubernetes

Gerenciar aplicações modernas significa lidar com dezenas de microsserviços rodando simultaneamente em dezenas de máquinas virtuais. No ecossistema de infraestrutura atual, o Kubernetes se tornou o padrão de fato para orquestração de contêineres, automatizando a implantação, o dimensionamento e a operação de sistemas complexos. Conforme essa infraestrutura cresce, a quantidade de dados gerados sobre o consumo de CPU, memória e requisições por segundo explode exponencialmente, exigindo ferramentas de observabilidade capazes de acompanhar esse ritmo sem consumir todos os recursos financeiros da empresa.

Para coletar essas métricas, a comunidade de tecnologia adotou amplamente o Prometheus, um sistema de monitoramento de código aberto que coleta informações em tempo real e as armazena localmente em um formato altamente compactado. Na prática, o Prometheus funciona como um coletor incansável que bate na porta de cada aplicação a cada poucos segundos, perguntando o seu estado atual. Esse modelo descentralizado funciona perfeitamente para ambientes menores, mas apresenta um calcanhar de Aquiles intransponível quando olhamos para grandes operações corporativas: o armazenamento local e a retenção de dados a longo prazo.

O grande gargalo surge do fato de que o Prometheus foi desenhado para ser rápido e autônomo, guardando seus dados no disco rígido da própria máquina onde roda. Quando esse disco enche, as métricas mais antigas são apagadas automaticamente para abrir espaço para as novas, limitando o histórico a poucos dias ou semanas. Além disso, se a máquina física que hospeda o Prometheus sofrer uma pane, todo o histórico acumulado pode desaparecer instantaneamente, cegando a equipe de engenharia justamente no momento em que mais precisam entender o comportamento anterior do sistema.

A Arquitetura do Thanos para Retenção Estendida

Quando a necessidade de negócio passa a exigir a guarda de métricas por seis meses, um ano ou mais — seja para auditoria de conformidade, seja para análise de tendências de crescimento de longo prazo —, o modelo padrão do Prometheus deixa de ser suficiente. É exatamente nesse cenário que entra o Thanos, um conjunto de componentes construídos para transformar o Prometheus em um sistema distribuído de alta disponibilidade e sem limites práticos de armazenamento. Na prática, o Thanos funciona como uma camada extra que se acopla ao Prometheus existente sem exigir reescritas massivas na infraestrutura.

O coração dessa solução é o componente chamado Sidecar, um pequeno programa que roda lado a lado com cada instância do Prometheus dentro do cluster Kubernetes. Esse Sidecar tem a função de ler continuamente os blocos de dados gerados pelo Prometheus local e enviá-los de forma assíncrona para um armazenamento de objeto de baixo custo na nuvem, como o Amazon S3, Google Cloud Storage ou qualquer serviço compatível com a API S3. Na prática, isso significa que os dados ganham um endereço permanente e seguro fora do cluster, protegidos contra falhas catastróficas das máquinas locais.

Outro ganho monumental dessa arquitetura é a eliminação da dependência de discos locais caros e superdimensionados. Em vez de comprar servidores com terabytes de armazenamento em estado sólido para segurar o histórico, a equipe de engenharia pode manter discos menores e mais baratos, delegando a responsabilidade de guarda de longo prazo para um serviço de nuvem elástico. Essa separação entre computação e armazenamento reduz drasticamente os custos operacionais e simplifica a recuperação de desastres, já que o estado do sistema fica isolado e persistido de forma segura na nuvem.

Implementação Prática com Sidecar e Componentes do Thanos

Para colocar essa arquitetura em funcionamento, o primeiro passo consiste em implantar o binário do Thanos Sidecar no mesmo pod do Kubernetes onde o Prometheus já está em execução. Abaixo está um exemplo simplificado de manifesto que ilustra como injetar o Sidecar e conectá-lo ao armazenamento remoto na nuvem usando um arquivo de configuração:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: prometheus-thanos
  namespace: monitoring
spec:
  replicas: 1
  selector:
    matchLabels:
      app: prometheus
  template:
    metadata:
      labels:
        app: prometheus
    spec:
      containers:
        - name: prometheus
          image: prom/prometheus:v2.45.0
          args:
            - '--config.file=/etc/prometheus/prometheus.yml'
            - '--storage.tsdb.path=/prometheus'
            - '--storage.tsdb.min-block-duration=2h'
            - '--storage.tsdb.max-block-duration=2h'
        - name: thanos-sidecar
          image: quay.io/thanos/thanos:v0.31.0
          args:
            - 'sidecar'
            - '--prometheus.url=http://localhost:9090'
            - '--objstore.config-file=/etc/thanos/bucket.yml'
          volumeMounts:
            - name: config-volume
              mountPath: /etc/thanos

Esse arranjo técnico garante que o Prometheus continue gravando seus blocos de métricas localmente a cada duas horas e, imediatamente após o fechamento do bloco, o Thanos Sidecar empacote e envie esse arquivo para o bucket na nuvem. A configuração do arquivo bucket.yml deve conter as credenciais e o nome do provedor de nuvem escolhido, garantindo que a comunicação ocorra de forma criptografada e segura nos bastidores da rede corporativa.

Uma vez que os dados estão sendo enviados continuamente para o armazenamento de objeto, o próximo componente essencial a ser implantado é o Thanos Querier. Esse serviço atua como um ponto centralizado de consultas que consegue conversar simultaneamente com múltiplos Sidecars em diferentes clusters Kubernetes e, ao mesmo tempo, buscar dados históricos no armazenamento de longo prazo. Na prática, quando um engenheiro abre um painel de monitoramento no Grafana e pede para ver o comportamento de um microssistema nos últimos doze meses, o Thanos Querier junta instantaneamente o dado em tempo real que está no disco do servidor com o dado antigo que está guardado na nuvem, apresentando uma linha do tempo contínua e sem interrupções.

Compactação, Downsampling e Otimização de Custos

Armazenar anos de métricas brutas sem nenhum critério de otimização gera um problema grave de consumo de banda de rede e lentidão nas consultas. Quando um sistema pergunta pela média de uso de CPU de dois anos atrás, processar segundo a segundo de milhões de pontos de dados consome muita memória e tempo de processamento. Para resolver esse desafio, o Thanos emprega um componente autônomo chamado Thanos Compactor, cuja função principal é organizar e simplificar os dados armazenados na nuvem em horários de menor movimento operacional.

O Compactor executa duas operações fundamentais: a compactação de blocos e o downsampling, que significa redução de resolução. Na prática, o downsampling pega os dados coletados a cada 15 segundos e calcula médias e percentis para intervalos maiores, como 5 minutos e 1 hora, preservando a forma e as tendências do gráfico mas eliminando milhares de pontos redundantes. Quando alguém olha um gráfico de um dia inteiro, a resolução de 5 minutos é mais do que suficiente para identificar picos de uso, tornando a resposta instantânea e economizando recursos computacionais massivos.

Essa estratégia de otimização altera completamente a economia de manter dados históricos em ambientes de produção. Sem o downsampling, o custo de armazenamento e a largura de banda consumida pelas consultas cresceriam de forma descontrolada conforme a empresa adicionasse novas aplicações ao cluster. Ao compactar e reduzir a resolução dos dados antigos, a arquitetura garante alta performance analítica sem exigir investimentos proibitivos em infraestrutura de nuvem, equilibrando perfeitamente a necessidade de auditoria com a eficiência de custos.

Considerações Finais e Melhores Práticas Operacionais

Adotar uma solução de monitoramento de longo prazo baseada em Thanos e Prometheus transforma radicalmente a maturidade operacional de uma empresa que utiliza Kubernetes. O principal aprendizado dessa jornada é que a observabilidade não deve ser tratada como um mero apêndice do sistema, mas sim como um pilar arquitetônico fundamental que sustenta a tomada de decisões técnicas e financeiras. Garantir visibilidade contínua de curto e longo prazo permite antecipar gargalos de capacidade antes que eles afetem o usuário final, aumentando drasticamente a resiliência de toda a operação de tecnologia.

No entanto, manter essa arquitetura saudável exige disciplina contínua por parte das equipes de engenharia de plataforma e confiabilidade. É fundamental monitorar a própria ferramenta de monitoramento — configurando alertas para falhas de envio do Sidecar, estouro de espaço em disco nos nós do Prometheus e gargalos de rede na nuvem. Com uma base sólida, processos automatizados de backup e políticas claras de retenção, a organização conquista total autonomia para escalar seus microssistemas com confiança absoluta, sabendo que nenhum evento importante passará despercebido pelos olhos vigilantes da observabilidade.