Monitoramento 101

minutos de leitura

10 de abril de 2023

Escrito por
Rodrigo Feijolo

 

Monitoramento 101

Introdução

Os clientes de produtos digitais estão cada vez mais exigentes, as expectativas não param de crescer. Há algum tempo já não basta mais funcionar apenas em horário comercial. Se está acessível pela internet é esperado que funcione 24h por dia.

Por causa disso, o monitoramento é um componente crítico para qualquer organização digital. Seja no Google ou em scale-ups de alto crescimento como a Gupy, o monitoramento ajuda a identificar e prevenir problemas antes deles se tornarem críticos.

As técnicas de monitoramento nos ajudam a entender a experiência que estamos fornecendo e como os usuários estão interagindo com os nossos produtos, sendo também um motor de inovação e crescimento. Em um assunto tão amplo, é difícil saber por onde começar. Nesse artigo vamos dividir algumas das melhores práticas para uma estratégia efetiva de monitoramento.

Monitoramento contínuo

Sem que seja possível observar se um sistema está funcionando, garantir a sua operação pode ser estressante. Nesse contexto, a pergunta que aparece, em qualquer momento do dia ou da noite, é a seguinte: “Será que está tudo bem?”. Não é nada agradável descobrir que não quando o telefone toca no meio da madrugada porque algum fluxo importante para os clientes simplesmente parou de funcionar. Os problemas enfrentados pelos clientes podem se manifestar de várias formas. As mais comuns são a “tela branca”, o “clico no botão e nada acontece” ou até mesmo uma genérica “lentidão”.

Uma das piores coisas que podem acontecer é ficarmos sabendo de problemas através de tickets abertos por clientes. Quando isso acontece, significa que o problema já está grande ao ponto de ser percebido pelas usuárias do sistema. Uma estratégia efetiva de monitoramento nos ajuda a perceber sinais de que algum componente do sistema está sobrecarregado ou sofrendo com falta de recursos, assim podemos agir para recuperar a experiência antes que os clientes percebam.

Em meio a esse cenário de crescentes expectativas por parte das usuárias, é essencial que a empresa esteja sempre buscando melhorias em sua infraestrutura e processos, e a prática de monitoramento contínuo do DevOps pode ser uma grande aliada nesse sentido.

DevOps é uma metodologia que busca unir as equipes de desenvolvimento e operações, promovendo uma maior colaboração e integração entre elas. Ao utilizar essa abordagem, a empresa consegue acelerar a entrega de suas soluções, aumentar a qualidade dos seus produtos e reduzir o tempo de resposta a incidentes.

Uma das práticas de DevOps é a de monitoramento contínuo. O monitoramento contínuo busca prover métricas e informações sobre a saúde geral dos sistemas e infraestrutura envolvidas em servir as usuárias, tudo isso quase em tempo real, com o delay de microssegundos em alguns casos.

Para ter acesso a essas informações, é necessário integrar as aplicações e a infraestrutura com ferramentas especializadas em ingerir e exibir métricas e logs. Algumas dessas ferramentas são pagas, como o Datadog, Honeycomb ou New Relic. Além desses produtos completos, também é possível se apoiar em ferramentas de código aberto, como Grafana, Prometheus e Kibana. Caso essa seja a sua escolha, se prepare, porque manter essas ferramentas funcionando com um bom nível de desempenho e confiabilidade é um desafio que não deve ser subestimado.

O que monitorar?

Quando os sistemas são conectados às ferramentas de monitoramento, recebemos uma enxurrada de métricas. Nesse ponto, é muito comum se sentir perdido e não saber o que é importante. Algumas das métricas mais relevantes para uma scale-up incluem:

  1. Tempo de resposta (response time): essa métrica mede o tempo que uma aplicação demora para responder a uma requisição. Um tempo de resposta alto pode indicar problemas na infraestrutura, na aplicação ou na rede.
  2. Disponibilidade (uptime): essa métrica mede o tempo em que uma aplicação está disponível para uso. É importante que a disponibilidade seja alta, pois isso significa que os clientes conseguem acessar o serviço sem interrupções, aumentando a confiança no produto.
  3. Taxa de erros (error rate): essa métrica mede a porcentagem de requisições que resultam em erros. Uma taxa de erros alta pode indicar os clientes estão enfrentando problemas.
  4. Latência (latency): essa métrica mede o tempo que uma aplicação demora para processar uma requisição. Uma latência alta significa que os clientes podem estar sofrendo com lentidão ao executarem as operações dentro do sistema
  5. Tempo de carregamento da página (Page Load Time): essa métrica mede o tempo que uma página leva para carregar no dispositivo de um usuário. Um alto tempo de carregamento pode indicar um problema de experiência que leva os usuários a abandonar o produto.
  6. Tempo para o primeiro byte (TTFB): essa métrica mede quanto tempo leva para o primeiro byte enviado pelo servidor ser recebido pelo dispositivo de um usuário. Um alto tempo para o primeiro byte pode indicar problemas de rede entre o servidor e o cliente.
  7. Tempo para interatividade (TTI): essa métrica mede quanto tempo leva para a página se tornar interativa. Se tornar interativa, nesse contexto, significa que a página capaz de reagir aos inputs do usuário, como cliques nos botões e rolagem, por exemplo. Um alto tempo para interatividade, além de atrapalhar a experiência, pode atrapalhar o ranqueamento do site em buscadores.
  8. Engajamento de usuários (User Engagement): essa métrica mede a interação dos usuários com o sistema, como número de cliques, scrolls e o tempo de navegação. Um baixo engajamento pode apontar problemas de experiência ou conteúdo.

Além dessas, existem muitas outras métricas para explorar e conhecer. A medida que vamos a relação delas com a performance do sistema e a experiência dos usuários, vamos, aos poucos, conseguindo correlacionar uma quantidade maior de métricas e, assim, ampliar o nosso conhecimento sobre os gargalos e oportunidades de otimização dos sistemas e da infraestrutura. O importante é começar pequeno e ir evoluindo aos poucos!

Monitoramento efetivo

É comum que muitos sistemas interajam entre si para servir uma única requisição de uma usuária. Alguns desses sistemas podem ser bem complexos, com muitos componentes interconectados e camadas. Para que uma experiência de excelência seja oferecida para os usuários, cada uma dessas partes precisa estar saudável. Uma estratégia de monitoramento efetiva garante de forma contínua e proativa que os componentes críticos estão saudáveis durante todo o tempo.

Muitas ferramentas de monitoramento possibilitam a criação de monitores, que acompanham continuamente um conjunto de métricas, e podem emitir alarmes, avisando os operadores que as métricas estão fora dos parâmetros esperados. Uma armadilha comum é monitorar métricas de mais e terminar em um cenário onde alarmes são emitidos a cada pequena alteração de comportamento do sistema, chegando no que chamamos de fadiga de alarmes. Uma boa maneira de sair dessa situação é revisar os alarmes e manter apenas os que geram alguma ação correção pelas pessoas que operam o sistema.

Quando os incidentes acontecem, precisamos mitigar os efeitos negativos para os clientes o mais rápido possível. Durante esse momento, as pessoas costumam se juntar nas famosas salas de guerra. Se você foi convocado, não entre em pânico. Uma postura calma e uma cultura de focar no problema ao invés de descobrir culpados ajuda as pessoas que estão passando por esse momento de estresse a chegar mais rápido em uma solução. Tente separar o que são fatos de hipóteses. Trabalhe no sentido de provar uma hipótese de cada vez, executando as ações com calma e anotando o horário de cada evento observado e cada modificação executada nos sistemas ou na infraestrutura. Aos poucos o quebra-cabeças vai se montando e vai ficando mais fácil encontrar a peça que está faltando.

É bem comum que os incidentes sejam dados como resolvidos depois de soluções paliativas, só para reaparecerem no momento mais inoportuno possível. Por isso, devemos resistir a tentação de parar nos paliativos. Depois de um incidente muitos times realizam uma cerimônia chamada de postmortem, nesse momento é feita e documentada uma análise detalhada das causas e a linha do tempo de eventos, com o objetivo de mapear ações para evitar incidentes iguais, responsáveis e prazos, além de construir uma base de conhecimento que pode ser utilizada como referência no futuro.

As aplicações geralmente estão inseridas em contextos bastante dinâmicos nas empresas modernas. Várias versões dos sistemas são disponibilizadas dentro do mesmo dia, e a infraestrutura que executa as aplicações também está em constante mudança. Além disso, os próprios clientes podem alterar o seu padrão de uso ao longo do tempo, o que torna imperativo que a operação dos sistemas também se mantenham e constante evolução. Por isso, uma outra prática importante dos times de alto desempenho é o compartilhamento de aprendizados para que incidentes iguais não se repitam.

Estratégias de monitoramento ainda mais avançadas são capazes de tomar medidas de remediação de incidentes alterando os sistemas a infraestrutura sem intervenção humana. Para chegar nesse nível de sofisticação é preciso ter uma mentalidade de melhoria contínua, atenção para os detalhes, aprender a interpretar as métricas no contexto de cada aplicação e funcionalidade e ter paixão por automação.

Conclusão

Essas técnicas podem ser grandes aliadas para as scale-ups que buscam expandir seus negócios de forma eficiente e escalável. Ao medir e monitorar o desempenho das aplicações, é possível ganhar mais eficiência no uso de recursos de infraestrutura, economia, velocidade na resolução de incidentes, felicidade das pessoas operando os sistemas e, principalmente, dos clientes.

No próximo artigo da série de monitoramento vamos trazer um estudo de caso da Gupy onde aplicamos essas técnicas para melhorar a performance de uma das nossas aplicações.

E você? Como os seus sistemas tem sido monitorados? Você já aplica algumas dessas técnicas? Conta pra gente nos comentários!