Artigo por Lucas Souza, Analista da Unirede
Introdução
No cenário dinâmico dos departamentos de TI, o monitoramento de sistemas se tornou uma prática indispensável. A coleta de métricas de servidores e aplicações é essencial para garantir o funcionamento adequado dos serviços. Contudo, a vasta quantidade de dados gerados por logs em operações, frequentemente permanece subutilizada. Como integrar esses dados de forma eficiente? A resposta está no conceito de Observabilidade.
A observabilidade vai além do monitoramento tradicional, ao fornecer uma visão integrada e detalhada da saúde dos sistemas. Fabricantes como a Grafana Labs se destacam ao oferecer uma suíte completa que permite explorar métricas, logs e traces, facilitando a implementação prática do conceito. Neste artigo, iremos mostrar como a stack Grafana pode transformar a maneira como você enxerga e gerencia seus sistemas.
Neste artigo, exploraremos como as principais ferramentas da Grafana suportam os três pilares da Observabilidade — métricas, logs e traces. Além disso, explicaremos como essas ferramentas ajudam na criação de dashboards robustos que centralizam informações críticas da saúde do ambiente e otimizam a gestão de TI.
Os Três Pilares da Observabilidade
Métricas
Se já usou alguma ferramenta de monitoramento como: Zabbix, Nagios, Prometheus entre outros, você está habituado com as métricas, basicamente, informações agregadas sobre a performance do seu servidor, ou health checks para validar se determinado web service está up ou down, dentro da observabilidade, temos algo chamado de “quatro sinais dourados’, ou “four golden signals” (em tradução: Latência, Tráfego, Erros e Saturação). O monitoramento de métricas é a base para identificar problemas e melhorar a operação. Essas são as quatro que inicialmente devemos nos focar a fim de termos o monitoramento de experiência final do usuário.
Logs
Os amigos de todo profissional da área de TI! Os logs são essenciais para a análise detalhada de incidentes. É comum que ao ocorrer algum erro identificado por meio das métricas obtidas no monitoramento, a primeira coisa que você vai fazer, em um cenário sem centralização dos Logs, é: Acessar o seu servidor, ir até o diretório de Logs (já veio a sua mente /var/logs?) e então executar um tail, grep ou imprudentemente um cat nos arquivos de logs. Reflita bem: muitas informações importantes da sua aplicação podem ou devem estar em seu arquivo de log, sejam relacionadas a acessos ou erros, isso o torna um importante recurso na resolução de incidentes.
Traces
O Tracing ou “rastreamento”, é basicamente a trilha das ações realizadas pela sua aplicação durante o uso do usuário final, assim, podemos ter de forma detalhada a informação de qual parte da minha aplicação demorou mais a responder. O tracing oferece um panorama detalhado das operações realizadas por uma aplicação.
Vamos supor que um usuário acesse um frontend, mas um determinado recurso da interface demorou a carregar, ou até mesmo não carregou, levou ao timeout, causando uma falha. O monitoramento pode ter registrado o aumento nos usos de recursos, os logs podem exibir algum erro em decorrência do timeout, no entanto, o Tracing poderá exibir quanto tempo aquela operação demorou para ser realizada, e em qual parte da execução da operação houve essa perda de performance.
Observabilidade na prática com Grafana
Como implementar a observabilidade na prática? Uma empresa que vem fazendo um ótimo serviço em relação a isso é a Grafana Labs. Ela oferta muito mais do que somente as Dashboards para gestão à vista que gostamos de usar em nosso dia a dia. A Grafana possui uma Stack voltada para observabilidade com ferramentas que abrangem cada um dos pilares informados acima.
Um exemplo real é uma aplicação simulando um e-commerce. Nesse cenário, utilizamos ferramentas da stack Grafana para monitorar:
Desenvolvendo o cenário:
Uma aplicação simulando um E-Commerce, o ambiente está configurado de forma monolítica em um servidor Linux, nele uma aplicação Python em Flask realizando operações como:
- Criação de usuário
- Validação das credenciais
- Geração de Token JWT
- Operações de compras
- Listagem dos produtos adquiridos pelo usuário
1º Pilar: Métricas
Por ser uma aplicação hospedada em um sistema operacional linux, temos a possibilidade de obter as métricas do SO com o Prometheus por meio do Prometheus Node exporter.
O Prometheus é um sistema de monitoramento amplamente usado no mundo todo, desenvolvido pela Soundcloud em 2012, pode ser executado tanto de forma monolítica (como em nosso cenário) quanto orquestrado em Containers Docker e Kubernetes, garantindo a alta escalabilidade da ferramenta.
Quando configurado junto do Grafana, o Prometheus funciona como um DataSource, onde é possível exibir de forma mais agradável suas métricas:
Figura 1. Métricas básicas do sistema operacional.
Você não é obrigado a usar o Grafana para exibir suas métricas, mas, como o foco aqui é a observabilidade — que busca centralizar as informações para facilitar a identificação de problemas — é altamente recomendável configurar sua stack de monitoramento juntamente com a aplicação responsável pela criação das dashboards.
2º Pilar: Logs
Se você vai verificar os Logs da sua aplicação quando tiver problemas ou se vai simplesmente avaliar a saúde da mesma, não faz sentido centralizar os Logs em um só lugar? Assim evitamos realizar o acesso via SSH a ferramenta todas as vezes, para isso, a Grafana desenvolveu o Grafana Loki, um eficiente centralizador de Logs baseado no Prometheus:
Figura 2. Painéis desenvolvidos com as métricas dos Logs.
Usando a LogQL do Grafana Loki, você pode transformar os Logs em métricas e não só uma visão textual dos registros da sua aplicação, podendo obter também uma visão gráfica compatível com outros Widgets do Grafana.
3º Pilar: Traces
Por fim, temos todo o rastreamento que sua aplicação vai realizar, os Traces são responsáveis por conter todas informações de cada operação realizada pelo seu Software, em nosso caso usamos o Grafana Tempo para exibir todos os Traces e Spans:
Figura 3. Visão dos Traces no Grafana Tempo.
O Grafana Loki e o Prometheus possuem agentes que podem ser instalados no servidor para coletar dados, que serão então enviados para um servidor centralizado. No caso do Tracing, as coisas mudam: o conceito de trace está intrinsecamente ligado ao OpenTelemetry.
O OpenTelemetry é um framework open source criado pela Cloud Native Computing Foundation (CNCF). Ele fornece APIs, bibliotecas e ferramentas para observabilidade em sistemas distribuídos, permitindo coletar e exportar métricas, logs e traces para análise.
É necessário, conforme a linguagem de programação da sua aplicação, verificar como ‘instrumentalizar’ o seu código. Há duas maneiras de instrumentalizar o seu código:
- Instrumentalização Zero Code: É a integração de ferramentas de monitoramento ou rastreamento em aplicações sem a necessidade de modificar o código, geralmente configurada por meio de agentes automáticos ou configurações
- Instrumentalização Baseada em Código: Exige alterações explícitas no código da aplicação para adicionar instrumentação, como chamadas a APIs de monitoramento, bibliotecas de rastreamento ou inclusão de métricas personalizadas.
Aprofundando o cenário
Em nossa aplicação de E-Commerce usamos as seguintes bibliotecas:
Tracing (Rastreamento)
- trace: API principal para criação e gerenciamento de spans.
- sdk.trace.TracerProvider: Configura o provedor responsável por criar Tracers, que geram e gerenciam spans de tracing.
Exportação de Dados
- exporter.otlp.proto.grpc.trace_exporter.OTLPSpanExporter: Exporta spans via OTLP (OpenTelemetry Protocol) usando gRPC para um servidor de monitoramento (nesse cenário é o Grafana Tempo).
- sdk.trace.export.BatchSpanProcessor: Processa spans em lotes antes de enviá-los, melhorando a eficiência.
Contextualização
- sdk.resources.Resource: Associa informações sobre a aplicação ou ambiente aos spans, fornecendo contexto.
Status dos Traces
- sdk.trace.Status: Definem o status das spans, indicando sucesso ou erro nas operações.
Instrumentação Automática
- instrumentation.flask.FlaskInstrumentor: Instrumenta automaticamente aplicações Flask para gerar traces de requisições HTTP.
Ao termos uma aplicação compatível com os conceitos de Observabilidade, podemos ter de forma visual uma Dashboard concentrando informações úteis para validar a saúde de nossa aplicação, desde os usos de recursos do nosso servidor, Logs para auditoria e a visão de tempo de resposta das operações da aplicação assim como erros que estejam ocorrendo:
Figura 4. Dashboard consolidada com os três pilares da observabilidade.
Com um passar de olhos é possível notar que não há usos de recursos abusivos que possam levar a deterioração da performance, mas nosso Painel de Logs exibe diversos Warnings, junto dos traces de Erro acompanhando o uso da aplicação.
Observando os Spans dos Traces, vemos que os erros vem da validação de credenciais:
Figura 5. Exemplo de Spans personalizados.
Ao Observar tanto o Painel quanto os Logs, é visível que nosso user intruso@exemplo.com é bastante persistente em suas tentativas de Login, a partir desse cenário, é possível verificar medidas a serem tomadas:
Figura 6. Uso de Logs junto dos Traces.
Por meio de Traces personalizados, podemos configurar para enviar quaisquer atributos que possamos achar vantajosos para nossa operação, como por exemplo, o processo de realizar a compra de um produto e as queries associadas ao processo:
Figura 7. Exemplo de Spans para uma operação.
Outro exemplo útil para uso de Traces é verificar o tempo de execução para cada operação, permitindo assim, termos métricas em tempo real do uso da aplicação para o usuário final:
Figura 8. Uso dos Traces para visibilidadeda experiência do usuário final.
Figura 9. Tempo registrado para cada operação.
Para concluir nosso artigo sobre observabilidade, é importante destacar o imenso potencial de expansão e adaptação desse conceito além dos pilares básicos de métricas, logs e traces. A observabilidade não é apenas uma ferramenta de monitoramento de sistemas; ela representa uma metodologia integrada para a gestão proativa de sistemas complexos. Mais do que isso, a observabilidade pode ser ampliada para englobar não apenas a infraestrutura de TI, mas também a experiência do usuário e a performance do negócio. Ao integrar dados de diversas fontes, ela fornece uma visão holística do desempenho operacional e experiência do cliente com a marca, permitindo insights valiosos para decisões estratégicas.
A adoção de padrões abertos e a colaboração entre ferramentas diferentes podem facilitar a interoperabilidade e melhorar a eficiência dos sistemas de monitoramento e diagnóstico. Empresas como a Grafana Labs estão na vanguarda, mas o espaço está aberto para inovações que tragam novas perspectivas à prática da observabilidade.
Em última análise, enquanto a tecnologia evolui e nossos sistemas se tornam cada vez mais intrincados, a observabilidade oferece uma bússola para navegar na complexidade, garantindo não apenas a performance técnica, mas também o alinhamento estratégico com os objetivos de negócios. A observabilidade é mais do que manter sistemas funcionando: é uma maneira de maximizar o potencial de um mundo digital em constante mudança.