paint-brush
Como extrair o valor máximo dos logspor@alvinslee
1,516 leituras
1,516 leituras

Como extrair o valor máximo dos logs

por Alvin Lee9m2023/08/25
Read on Terminal Reader

Muito longo; Para ler

Veremos como os logs podem ser projetados, os desafios e soluções para o registro em grandes sistemas e como pensar sobre métricas baseadas em log e retenção de longo prazo.
featured image - Como extrair o valor máximo dos logs
Alvin Lee HackerNoon profile picture

O registro é sem dúvida o elemento mais importante da sua solução de observabilidade. Os logs fornecem informações básicas e valiosas sobre o comportamento do sistema. Em um mundo ideal, você tomaria todas as decisões sobre o registro em log e implementaria uma abordagem consistente em todo o sistema.


No entanto, no mundo real, você pode trabalhar com software legado ou lidar com diferentes linguagens de programação, estruturas e pacotes de código aberto, cada um com seu próprio formato e estrutura para registro.


Com tanta diversidade de formatos de log em seu sistema, quais etapas você pode seguir para extrair o máximo valor de todos os seus logs? É isso que abordaremos neste post.


Veremos como os logs podem ser projetados, os desafios e soluções para o log em grandes sistemas e como pensar sobre métricas baseadas em log e retenção de longo prazo.


Vamos nos aprofundar nos níveis e formatos de log.

Projeto de registro

Muitas considerações são feitas no design do log, mas os dois aspectos mais importantes são o uso de níveis de log e se devem ser usados formatos de log estruturados ou não estruturados.

Níveis de registro

Os níveis de log são usados para categorizar mensagens de log com base em sua gravidade. Os níveis de log específicos usados podem variar dependendo da estrutura ou sistema de log. No entanto, os níveis de log comumente usados incluem (em ordem de detalhamento, do mais alto para o mais baixo):


  • TRACE : Captura todas as ações executadas pelo sistema, para reconstruir um registro abrangente e contabilizar qualquer mudança de estado.


  • DEBUG : captura informações detalhadas para fins de depuração. Essas mensagens normalmente são relevantes apenas durante o desenvolvimento e não devem ser habilitadas em ambientes de produção.


  • INFO : Fornece informações gerais sobre a operação do sistema para transmitir eventos importantes ou marcos na execução do sistema.


  • AVISO : Indica possíveis problemas ou situações que podem exigir atenção. Estas mensagens não são críticas, mas devem ser anotadas e investigadas, se necessário.


  • ERRO : Indica erros ocorridos durante a execução do sistema. Estas mensagens normalmente destacam problemas que precisam ser resolvidos e podem afetar a funcionalidade do sistema.


O registro no nível apropriado ajuda a compreender o comportamento do sistema, identificar problemas e solucionar problemas de forma eficaz.


Quando se trata de componentes do sistema que você cria, recomendamos que você dedique algum tempo à definição do conjunto de níveis de log que são úteis. Entenda quais tipos de informações devem ser incluídas nas mensagens em cada nível de log e use os níveis de log de forma consistente.


Posteriormente, discutiremos como lidar com aplicativos de terceiros, nos quais você não tem controle sobre os níveis de log. Também veremos aplicativos legados que você controla, mas que são muito expansivos para serem migrados para os níveis de log padrão.

Logs estruturados versus não estruturados

As entradas em logs estruturados têm um formato bem definido, geralmente como pares de valores-chave ou objetos JSON. Isso permite entradas de log consistentes e legíveis por máquina, facilitando a análise e análise de dados de log de forma programática.


O log estruturado permite consultas e análises avançadas de log, tornando-o particularmente útil em sistemas de grande escala.


Por outro lado, o log não estruturado (formato livre) captura mensagens em um formato mais legível, sem uma estrutura predefinida. Essa abordagem permite que os desenvolvedores registrem mensagens de maneira mais natural e flexível.


No entanto, extrair programaticamente informações específicas dos logs resultantes pode ser muito desafiador.


A escolha entre logs estruturados e não estruturados depende de suas necessidades específicas e dos requisitos e restrições do seu sistema. Se você antecipar a necessidade de análise avançada de logs ou integração com ferramentas de análise de logs, os logs estruturados podem fornecer benefícios significativos.


No entanto, se tudo o que você precisa é de simplicidade e legibilidade, os logs não estruturados podem ser suficientes.


Em alguns casos, também pode ser utilizada uma abordagem híbrida, onde se utilizam registos estruturados para eventos importantes e registos não estruturados para mensagens mais gerais.


Para sistemas de grande escala, você deve optar pelo registro estruturado sempre que possível, mas observe que isso adiciona outra dimensão ao seu planejamento. A expectativa para mensagens de log estruturadas é que o mesmo conjunto de campos seja usado de forma consistente em todos os componentes do sistema. Isso exigirá planejamento estratégico.

Desafios de registro

Com sistemas compostos por múltiplos componentes, cada componente provavelmente terá seu próprio modelo para gerenciar seus logs. Vamos revisar os desafios que isso traz.

Destinos díspares

Os componentes serão registrados em destinos diferentes – arquivos, logs do sistema, stdout ou stderr. Em sistemas distribuídos, coletar esses logs dispersos para uso eficaz é complicado.


Para isso, você precisará de uma abordagem diversificada para coleta de logs, como usar coletores instalados e coletores hospedados do Sumo Logic.

Formatos Variados

Alguns componentes usarão log não estruturado e de formato livre, sem seguir nenhum formato em particular. Enquanto isso, os logs estruturados podem ser mais organizados, mas os componentes com logs estruturados podem empregar conjuntos de campos completamente diferentes.


Unificar as informações obtidas de uma diversidade de registros e formatos requer as ferramentas certas.

Níveis de registro inconsistentes

Os componentes do seu sistema podem usar diferentes intervalos de níveis de log. Mesmo se você consolidar todas as mensagens de log em um sistema de log centralizado (como deveria), precisará lidar com a união de todos os níveis de log.


Um desafio que surge é quando diferentes níveis de log devem ser tratados da mesma forma. Por exemplo, ERRO em um componente pode ser igual a CRÍTICO em outro componente, exigindo escalonamento imediato.


Você enfrenta o desafio oposto quando o mesmo nível de log em componentes diferentes significa coisas diferentes. Por exemplo, as mensagens INFO em um componente podem ser essenciais para a compreensão do estado do sistema, enquanto em outro componente podem ser muito detalhadas.

Custo de armazenamento de log

Grandes sistemas distribuídos acumulam muitos logs. Coletar e armazenar esses logs não é barato. Os custos relacionados aos logs na nuvem podem representar uma parcela significativa do custo total do sistema.

Lidando com esses desafios

Embora os desafios do registro em sistemas grandes e distribuídos sejam significativos, soluções podem ser encontradas por meio de algumas das práticas a seguir.

Agregue seus registros

Ao executar um sistema distribuído, você deve usar uma solução de registro centralizada. À medida que você executa agentes de coleta de logs em cada máquina do seu sistema, esses coletores enviarão todos os logs para sua plataforma central de observabilidade.


Sumo Logic, que sempre se concentrou no gerenciamento e análise de logs , é o melhor da categoria quando se trata de agregação de logs.

Mover-se em direção a um formato unificado

Lidar com logs em formatos diferentes é um grande problema se você deseja correlacionar dados de log para análise e solução de problemas em aplicativos e componentes. Uma solução é transformar diferentes logs em um formato unificado.


O nível de esforço para esta tarefa pode ser alto, então considere fazer isso em fases, começando com os componentes mais essenciais e indo descendo.

Estabeleça um padrão de registro em seus aplicativos

Para seus próprios aplicativos, trabalhe para estabelecer uma abordagem de log padrão que adote um conjunto uniforme de níveis de log, um único formato de log estruturado e uma semântica consistente.


Se você também tiver aplicativos legados, avalie o nível de risco e custo associado à migração deles para aderir ao seu padrão.


Se uma migração não for viável, trate seus aplicativos legados como trataria aplicativos de terceiros.

Enriqueça registros de fontes de terceiros

Enriquecer logs de fontes de terceiros envolve aprimorar os dados de log com informações contextuais de sistemas ou serviços externos. Isso traz uma melhor compreensão dos eventos de log, auxiliando na solução de problemas, análise e atividades de monitoramento.


Para enriquecer seus logs, você pode integrar sistemas externos (como APIs ou filas de mensagens) para buscar dados complementares relacionados a eventos de log (como informações do usuário, detalhes do cliente ou métricas do sistema).

Gerenciar volume de log, frequência e retenção

O gerenciamento cuidadoso do volume, da frequência e da retenção de logs é crucial para um gerenciamento e armazenamento eficientes de logs.


  • Volume : o monitoramento do volume de log gerado ajuda a controlar o consumo de recursos e os impactos no desempenho.


  • Frequência : Determine com que frequência registrar, com base na criticidade dos eventos e no nível desejado de monitoramento.


  • Retenção : Defina uma política de retenção de log apropriada para requisitos de conformidade, necessidades operacionais e armazenamento disponível.


  • Rotação : arquive ou limpe periodicamente arquivos de log mais antigos para gerenciar os tamanhos dos arquivos de log de maneira eficaz.


  • Compactação : compacta arquivos de log para reduzir os requisitos de armazenamento.

Métricas baseadas em registros

As métricas derivadas da análise de dados de log podem fornecer insights sobre o comportamento e o desempenho do sistema. Trabalhar com métricas baseadas em logs tem seus benefícios e desafios.

Benefícios

  • Insights granulares : métricas baseadas em log fornecem insights detalhados e granulares sobre eventos do sistema, permitindo identificar padrões, anomalias e possíveis problemas.


  • Monitoramento abrangente : ao aproveitar métricas baseadas em logs, você pode monitorar seu sistema de forma abrangente, obtendo visibilidade de métricas críticas relacionadas à disponibilidade, desempenho e experiência do usuário.


  • Análise histórica : métricas baseadas em log fornecem dados históricos que podem ser usados para análise de tendências, planejamento de capacidade e otimização de desempenho. Ao examinar as tendências de log ao longo do tempo, você pode tomar decisões baseadas em dados para melhorar a eficiência e a escalabilidade.


  • Flexibilidade e personalização : você pode personalizar a extração de métricas baseadas em log para atender seu aplicativo ou sistema, concentrando-se nos eventos e pontos de dados mais significativos para suas necessidades.

Desafios

  • Definir métricas significativas : como o conjunto de métricas disponíveis em todos os seus componentes é incrivelmente vasto (e não faria sentido capturar todas elas), identificar quais métricas capturar e extrair dos logs pode ser uma tarefa complexa.


    Essa identificação requer uma compreensão profunda do comportamento do sistema e um alinhamento próximo com seus objetivos de negócios.


  • Extração e análise de dados : a análise de logs para extrair métricas úteis pode exigir ferramentas especializadas ou analisadores personalizados. Isso é especialmente verdadeiro se os logs não estiverem estruturados ou formatados de forma inconsistente de um componente para outro.


    Configurar isso pode ser demorado e exigir manutenção à medida que os formatos de log mudam ou surgem novas fontes de log.


  • Necessidade de análise em tempo real : Atrasos no processamento de métricas baseadas em logs podem levar a métricas desatualizadas ou irrelevantes. Para a maioria das situações, você precisará de uma plataforma que possa realizar o processamento rápido e em tempo real dos dados recebidos para aproveitar as métricas baseadas em log de maneira eficaz.


  • Impacto no desempenho : a captura contínua de métricas de perfil de componentes sobrecarrega ainda mais os recursos do sistema. Você precisará encontrar um bom equilíbrio entre capturar métricas baseadas em log suficientes e manter o desempenho adequado do sistema.


  • Ruído e irrelevância dos dados : os dados de registro geralmente incluem muito ruído e informações irrelevantes, não contribuindo para métricas significativas. A filtragem e a normalização cuidadosas dos registros são necessárias para concentrar a coleta de dados em eventos relevantes.

Retenção de log de longo prazo

Depois de migrar para a agregação de logs em um sistema centralizado, você ainda precisará considerar políticas de retenção de logs de longo prazo. Vamos cobrir as questões críticas para esta área.

Por quanto tempo você deve manter os registros?

Por quanto tempo você deve manter um registro depende de vários fatores, incluindo:


  • Tipo de log : alguns logs (como logs de acesso) podem ser excluídos após um curto período de tempo. Outros logs (como logs de erros) podem precisar ser mantidos por mais tempo caso sejam necessários para solução de problemas.


  • Requisitos regulatórios : setores como saúde e finanças têm regulamentações que exigem que as organizações mantenham registros por um determinado período, às vezes até alguns anos.


  • Política da empresa : sua empresa pode ter políticas que determinam por quanto tempo os registros devem ser mantidos.


  • Tamanho do log : se seus logs forem grandes, pode ser necessário girá-los ou excluí-los com mais frequência.


  • Custo de armazenamento : independentemente de onde você armazena seus logs – no local ou na nuvem – você precisará levar em consideração o custo de armazenamento.

Como você reduz o nível de detalhe e o custo de logs mais antigos?

Excluir logs antigos é, obviamente, a maneira mais simples de reduzir seus custos de armazenamento. No entanto, pode ser um pouco pesado e, às vezes, você pode querer manter informações de registros antigos.


Quando você quiser manter informações de registros antigos, mas também quiser ser econômico, considere tomar algumas destas medidas:


  • Logs de redução da resolução : no caso de componentes que geram muitas instruções de log repetitivas, você pode ingerir apenas um subconjunto das instruções (por exemplo, 1 em cada 10).


  • Cortando logs : para logs com mensagens grandes, você pode descartar alguns campos. Por exemplo, se um log de erros tiver um código de erro e uma descrição de erro, você poderá ter todas as informações necessárias mantendo apenas o código de erro.


  • Compactação e arquivamento : você pode compactar logs antigos e movê-los para um armazenamento mais barato e menos acessível (especialmente na nuvem). Esta é uma ótima solução para registros que você precisa armazenar durante anos para atender aos requisitos de conformidade regulatória.

Conclusão

Neste artigo, vimos como aproveitar ao máximo o registro em log em sistemas de grande escala.


Embora o registo nestes sistemas apresente um conjunto único de desafios, analisámos soluções potenciais para estes desafios, tais como agregação de registos, transformação de registos num formato unificado e enriquecimento de registos com dados de fontes de terceiros.


O registro é uma parte crítica da observabilidade. Seguindo as práticas descritas neste artigo, você pode garantir que seus logs sejam gerenciados de forma eficaz, permitindo solucionar problemas, identificar problemas e obter insights sobre o comportamento do seu sistema.


E você pode fazer isso enquanto mantém os custos de registro sob controle.


Também publicado aqui