Gerenciamento de logs se refere a todos os processos envolvidos no tratamento de dados de log, incluindo a geração, a agregação, o armazenamento, a análise, o arquivamento e o descarte de logs. Um sistema de gerenciamento de logs deve registrar tudo que acontece em um aplicativo, rede ou servidor, como um erro, uma solicitação HTTP, entre outros. Esses dados de log podem ser usados para análise e resolução de problemas. Nos aplicativos modernos, é comum ter milhões ou bilhões de eventos oriundos de serviços diferentes todo dia, o que pode representar um desafio para o gerenciamento e, sobretudo, para a extração de insights acionáveis sobre os incidentes. Por esse motivo, o gerenciamento de logs é uma parte essencial das práticas de DevOpsobservabilidade e TI.

O que é um log?

Um log é um registro datado e gerado por computador através de uma ação ou um evento distinto e específico. Quase tudo nos sistemas de software modernos pode produzir dados de log e a prática recomendada é garantir que você faça isso. Entre os dados que você normalmente deve registrar incluem: chamadas de função, erros, solicitações HTTP, transações de banco de dados e muito mais. Os logs são um relatório detalhado das ações à medida que elas acontecem.

Por que os logs são importantes?

Os logs são um registro de cada evento que acontece no seu aplicativo, na sua rede ou no seu servidor. Eles fornecem as bases para o monitoramento de aplicativos, o monitoramento de erros e para o relatório de erros, o que os torna uma parte essencial da observabilidade. Nenhuma dessas atividades seria possível sem o registro em log dos dados.

Há quatro tipos de dados de telemetria usados na observabilidade e monitoramento. Você pode usar o acrônimo MELT para memorizá-los.

  • Métricas são baseadas em dados de log agregados e fornecem informações sobre o desempenho do seu aplicativo. Ferramentas como o New Relic geram automaticamente algumas métricas, mas você pode personalizar outras métricas de acordo com as suas necessidades.
  • Eventos descrevem coisas que acontecem em um aplicativo. Eles consistem em várias linhas de dados de log. Os eventos ocupam mais espaço de armazenamento do que os logs, por isso tendem a não ser mantidos no armazenamento por tanto tempo quanto os logs.
  • Logs são muito mais granulares do que eventos e descrevem cada etapa que acontece em um aplicativo.
  • Traces usam spans para conectar eventos, tornando possível o rastreamento da causa raiz de um problema e sua correção.
Estudo de caso
História do cliente Virtuo da New Relic
Saiba como os clientes da New Relic usaram logs para resolver incidentes em tempo recorde
Estudo de caso da Virtuo Estudo de caso da Virtuo

Todos os quatro tipos de dados de telemetria têm os logs em comum. Sem os logs, não existe MELT e não é possível observar o que acontece no seu aplicativo. Em vez de ser capaz de monitorar proativamente seus dados em busca de problemas, você fica sabendo dos problemas através dos seus usuários finais, o que o força a adotar uma atitude reativa e não proativa para resolver os problemas. Para piorar a situação, quando você fica sabendo de um problema, é muito difícil corrigi-lo sem os logs porque não há um registro dos erros do seu aplicativo. O resultado final são usuários insatisfeitos, engenheiros estressados, clientes frustrados e, provavelmente, um produto malsucedido.

Os logs também oferecem outro benefício importante: eles costumam ser muito pequenos. Por esse motivo, eles são muito mais fáceis de transmitir e armazenar do que muitos outros tipos de dados, como eventos.

Com o New Relic, você pode ver todos os seus logs em um só lugar.

Por que o gerenciamento de logs é importante?

Apenas configurar um aplicativo não basta para gerar dados de log. Você provavelmente já ouviu falar do seguinte experimento filosófico: “Se uma árvore cai na floresta e ninguém está perto para ouvir, ela fez barulho?”. No caso de dados de log, se os dados são produzidos, mas não são coletados e armazenados de maneira adequada, essas informações de log são perdidas. Os dados de log precisam ser enviados para algum lugar, preferencialmente para um local centralizado onde possam ser devidamente analisados e recuperados conforme a necessidade, em contexto com dados de outros serviços. 

Contudo, a coleta centralizada de dados é apenas uma etapa no processo de gerenciamento de logs. O gerenciamento de logs envolve cuidar de cada parte do ciclo de vida do log, desde o momento em que os dados de log são produzidos até serem arquivados ou excluídos.

Muitos aplicativos modernos incluem microsserviços, sistemas distribuídos e serviços baseados na nuvem, sendo que cada parte do sistema produz seus próprios dados de log. Digamos, por exemplo, que você precisa saber quais solicitações HTTP têm o maior tempo médio de resposta no seu aplicativo. Se o aplicativo for distribuído, vários serviços poderão fazer solicitações HTTP e você só conseguirá compará-los se os dados do log estiverem disponíveis em um só lugar. Aí entra o gerenciamento de logs bem-sucedido.

O gerenciamento de logs bem-sucedido permite:

  • Reduzir a alternância de contexto: o armazenamento dos seus dados de log em um só lugar elimina a necessidade de trocar de ferramenta e contexto. Se os dados do log estão armazenados em lugares diferentes, é possível que você tenha que conferir vários lugares e ferramentas para resolver um problema.
  • Encontrar e corrigir problemas mais rapidamente: uma solução de gerenciamento de logs permite recuperar, analisar e visualizar com rapidez os dados de log em contexto, o que ajuda você a identificar e eliminar problemas antes que eles afetem seus usuários.
  • Procurar imediatamente no log os dados necessários: uma boa solução de log fornece toda a funcionalidade de pesquisa necessária para procurar e extrair rapidamente os dados de que você precisa.
  • Visualizar todos os seus dados em um só lugar: com dados de log centralizados, você pode usar MELT para criar visualizações e painéis personalizados que apresentam uma visão geral de alto nível do desempenho do seu aplicativo.

Então, quais são os recursos que você precisa ter para garantir que terá esses benefícios? Vejamos.

Quais recursos sua solução de gerenciamento de logs deve incluir?

Você extrairá o benefício máximo de suas ferramentas de gerenciamento de logs se elas incluírem os seguintes recursos. 

  • Instrumentação flexível e abrangente: para reunir todos os dados de log em um só lugar, seu aplicativo precisa ser instrumentado. A instrumentação é o processo de instalação de agentes que rastreiam os dados que circulam no seu aplicativo. Considere um aplicativo que tenha vários serviços na nuvem, além de APIs Java, Rails e .NET, e que usa principalmente React e JavaScript no front-end. Cada um desses serviços precisa ser instrumentado e sua ferramenta de gerenciamento de logs deve ter agentes disponíveis para o máximo possível de linguagens de programação e serviços, para que você tenha cobertura completa para todos os seus serviços. Embora você possa decidir não instrumentar parte de seu aplicativo (por exemplo, dados confidenciais), qualquer serviço que não seja instrumentado deixará lacunas nos seus dados de log.
  • Compatibilidade com encaminhamento de logs: se não for possível instrumentar um serviço, você precisará encaminhar seus logs. Sua ferramenta de gerenciamento de logs deve ser compatível com o encaminhamento de logs. 
  • Consultas avançadas: se um erro é gerado, você precisa ser capaz de acessar seus logs imediatamente. Por isso é importante que sua solução de gerenciamento de logs tenha a capacidade de consultar dados de maneira rápida e eficiente. Por exemplo, o New Relic usa NRQL (New Relic Query Language), que oferece uma grande variedade de consultas flexíveis para que os usuários extraiam os dados de que precisam.
  • Armazenamento seguro de dados: a segurança é essencial para tratar dados confidenciais de logs, principalmente para aplicativos que exigem altos níveis de conformidade, como HIPAA (um padrão para proteger a privacidade de dados e registros médicos e de saúde).