Desenvolvimento

13 jul, 2017

Telemetria de microsserviços

Publicidade

Rastrear transações de ponta a ponta certamente não é uma tarefa fácil, ainda mais quando se trabalha com microsserviços. Hoje pretendo mostrar algumas ferramentas e tecnologias para trabalhar com gerenciamento de logs.

Por que devo me preocupar em logar?

Uma aplicação com logs bem estruturados pode lhe proporcionar informações valiosas se bem analisados, sem contar que pode te economizar horas na busca daquele determinado problema.

E onde devo gravar meus logs?

Aplicações tradicionais costumam enviar seus logs para a saída do console ou para um arquivo em disco na máquina. Uma atenção deve ser tomada aqui quando estamos falando de aplicativos nativos para a nuvem, pois como é mencionado em um dos princípios dos Doze Fatores, devemos evitar o armazenamento em disco.

E como funciona os logs nos microsserviços?

Nesse contexto os apps podem ser executados tanto em máquinas físicas quanto em virtuais, resultando em arquivos de logs fragmentados. Nesse caso é quase impossível ter rastreabilidade com vários microsserviços.

Conforme a imagem acima, cada instância da aplicação cria seu arquivo de log local, isso acaba dificultando a rastreabilidade

Solução? Centralizar os logs

Objetivo desta solução é separar o armazenamento e processamento dos logs no ambiente de execução dos serviços e enviar para um armazenamento centralizado.

Opções disponíveis para logs centralizados:

  • Loggly – Baseado na nuvem
  • Graylog – Open Source
  • Splunk – Comercial

Agora meus logs estão sobre controle!? #SQN

A solução acima abordou o problema da fragmentação dos logs gerados pelos microsserviços centralizando os dados. No entanto ainda é quase impossível ter rastreabilidade das transações de ponta a ponta. Para resolvermos isso precisamos implementar um ID de correlação entre as transações.

Por sorte alguém já teve esse problema e resolveu criar um sistema de rastreamento distribuído, como foi o caso do Twitter com Zipkin, Cloudera com HTrace ou o Google com Dapper.

Como mostra na imagem acima, o trace-id é passado a cada chamada realizada pelo serviço de origem

Spring Cloud Sleuth

Spring cloud fornece um wrapper das soluções de sistemas de rastreamento distribuído citados acima, além de disponibilizar sua implementação de rastreamento distribuído baseado nessas mesmas tecnologias.

Features:

  • Adiciona um trace e span ID ao MDC Slf4J, para que você possa extrair todos os logs de um determinado intervalo em um agregador de log;
  • Fornece uma abstração sobre os modelos comuns de rastreamento de logs distribuídos como Zipkin, HTrace etc;
  • Sleuth registra informações temporárias para auxiliar na análise de latência. Usando o Sleuth, você pode identificar as causas de latência em seus aplicativos.

Para mais detalhes: Documentação de referência.

Espero que tenham aprendido um pouco mais sobre como rastrear transações ponto a ponto em ambientes de microsserviços.

Referências