Os sistemas e aplicativos em produção falham por diversos motivos. Não importa quanto esforço você gaste, sempre haverá algo que pode dar errado nesse contexto. Se você não instrumentar de maneira eficaz os componentes do seu aplicativo para que sejam observáveis, terá dificuldade em depurar problemas de produção. Por outro lado, mesmo um sistema observável não terá as respostas para todos os problemas.
Os profissionais que utilizam a observabilidade precisam examinar os dados de que dispõe para determinar sua utilidade. A capacidade de observação envolve ter os dados corretos para ajudá-lo a obter respostas para problemas conhecidos e desconhecidos na produção.
Ou seja, é preciso adaptar continuamente a instrumentação do seu sistema até que seja devidamente observável a um ponto onde você possa obter respostas a quaisquer perguntas necessárias para dar suporte ao seu aplicativo no nível de qualidade que você deseja.
Qual a diferença entre monitoramento e observabilidade?
A complexidade dos sistemas e aplicativos modernos aumentou consideravelmente. A necessidade de um método de depuração e diagnóstico de problemas, mais inclusivo para aplicativos modernos, nunca foi tão aparente, especialmente em sistemas distribuídos. Felizmente, as ferramentas de nuvem e orquestração tornam possível provisionar facilmente novos ambientes e implantar e gerenciar aplicativos modernos.
Historicamente, uma combinação entre monitoração e testes tem sido utilizada para lidar com falhas previsíveis. Entretanto, essa abordagem é menos eficaz com falhas imprevisíveis. É aqui que a observabilidade entra em jogo. A observabilidade tem suas raízes na teoria de controle, que aborda o quão bem você pode inferir o estado interno de um sistema olhando para sua saída.
Como a observabilidade ainda é muito nova, a linha que divide a observabilidade e o monitoramento parece confusa para as equipes de desenvolvimento.
Tudo mudou com os microsserviços
A arquitetura de microsserviços agora é o padrão de fato para aplicativos da web. De acordo com pesquisa da O’Reilly, 61% dos entrevistados afirmaram ter usado a arquitetura de microsserviços por um ano ou mais, e 55% afirmaram que a arquitetura de microsserviços é fundamental para seu sucesso.
Microsserviços são uma coleção de serviços fracamente conectados. Uma das vantagens da arquitetura de microsserviços é que os diferentes componentes do sistema podem ser criados e implementados individualmente em diferentes plataformas.
As empresas podem estruturar suas equipes em torno de problemas de negócios, com cada equipe trabalhando independentemente das outras para tornar o trabalho mais ágil e escalar. Com a maneira monolítica de criar aplicativos, não era possível para as organizações que desejavam adotar a mentalidade DevOps. Em outras palavras, se sua organização deseja expandir, você precisa dividir as coisas.
Embora a arquitetura de microsserviços tenha vantagens, à medida que os serviços aumentam, sua complexidade se torna aparente e a depuração e o diagnóstico das várias partes interconectadas se tornam mais difíceis.
Como a migração para uma arquitetura de microsserviços não é mais uma opção, mas uma obrigação para as organizações que desejam adotar a mentalidade DevOps, as empresas devem descobrir como podem evitar perder a capacidade de saber sobre as falhas do sistema e reagir a elas conforme o sistema se torna mais complexo.
O monitoramento poderia fornecer essa capacidade?
O papel do monitoramento
Um sistema de monitoramento deve abordar duas questões: O que está quebrado e por quê? “O que está quebrado” é sobre o sintoma, enquanto “por que” é sobre uma causa (possivelmente intermediária). Um bom entendimento das distinções entre “o quê” e “por quê” permite monitorar efetivamente um sistema distribuído com ruído mínimo e sinal máximo. O monitoramento permite que você observe e entenda o estado do seu sistema usando um conjunto predefinido de métricas e registros. Monitoramos os aplicativos para detectar falhas conhecidas.
O monitoramento é crucial para analisar tendências de longo prazo, para construir painéis e para alertar. Ele permite que você saiba como seus aplicativos funcionam, como eles estão crescendo e como estão sendo utilizados.
Quando o monitoramento é combinado com alertas, seu sistema é capaz de dizer o que está quebrado ou o que está prestes a quebrar. Com esses dados, você pode entender facilmente o comportamento do seu aplicativo, detectar problemas e resolvê-los rapidamente antes que os usuários sejam afetados.
Por exemplo, você pode monitorar um sistema em busca de problemas conhecidos ou previstos, como armazenamento ficando sem espaço em disco, mas quando se trata de incógnitas desconhecidas ou falhas imprevistas, o monitoramento não é o suficiente.
Para que o monitoramento seja eficaz, você precisa ser capaz de identificar com precisão um conjunto principal de métricas que indica a integridade de um sistema ou um conjunto de modos de falha de um sistema.
A limitação do monitoramento vem do fato de que, para ser eficaz, requer que você saiba o que é normal. Você precisa saber quais métricas rastrear, mas as falhas de produção não são lineares. Você não pode prever falhas o tempo todo.
Visto que o monitoramento pode se tornar tão complexo que é complicado de mudar e difícil de manter, é sempre bom projetar seu sistema de monitoramento para ser o mais simples possível. É importante lembrar os seguintes pontos ao escolher o que monitorar:
- As regras que detectam incidentes reais devem ser tão confiáveis, previsíveis e diretas quanto possível.
- Seus dados de monitoramento precisam ser acionáveis.
- Você deve evitar o uso de qualquer coleta de dados, alerta e configuração de agregação que raramente é realizada.
- Você deve evitar o uso de sinais que são coletados, mas não usados por quaisquer alertas e não expostos em nenhum painel pré-configurado.
Embora o monitoramento não torne os sistemas totalmente imunes a falhas, ele deve fornecer uma visão razoavelmente boa da saúde do sistema.
Mesmo que seus dados de monitoramento não sejam usados diretamente para gerar alertas, eles devem pelo menos dar uma visão panorâmica do comportamento e desempenho de um sistema em estado natural. Os dados também devem fornecer visibilidade sobre os efeitos de qualquer correção implantada. Se houver uma falha, os dados devem ajudá-lo a entender seu impacto.
Portanto, ao definir que algum item de infraestrutura será agregado à monitoração este item deve agregar algum dashboard ou ser componente da disponibilidade de algum item que compõe um dashboard.
O resultado final é que o monitoramento é uma ferramenta indispensável para construir e operar sistemas.
Por fim, o papel da observabilidade
A observabilidade, que se originou da teoria de controle, mede o quão bem, você pode entender os estados internos de um sistema a partir de suas saídas. Você pode pensar em observabilidade como um superconjunto de monitoramento no sentido de que se um sistema é observável, ele pode ser monitorado.
A capacidade de observação fornece informações que ajudam no monitoramento. Monitoramento é o que você faz depois que um sistema é observável. Sem algum nível de observabilidade, o monitoramento se torna impossível. Um sistema observável permite que você navegue dos efeitos à causa em um sistema de produção. Observabilidade diz a você o quê, onde e por quê.
Além disso, a capacidade de observação também ajudará sua equipe a dominar o sistema e entender melhor como ele se comporta em um ambiente vivo, especialmente se você estiver adotando arquiteturas distribuídas baseadas em nuvem, como aquelas geralmente encontradas com microsserviços e sem servidor (serverless).
A capacidade de observação está posicionada de maneira única para responder às perguntas que surgem quando você soluciona problemas ou opera sistemas distribuídos modernos. Ajuda a encontrar respostas para perguntas como:
- Por quais serviços uma solicitação passou e quais foram gargalos de desempenho?
- Como foi a execução do pedido diferente do comportamento esperado do sistema?
- Por que a solicitação falhou?
- Como cada microsserviço processou a solicitação?
A observabilidade pode ser dividida em três pilares principais: logs, métricas, e rastreamento.
Logs
Um log é um registro imutável com carimbo de data/hora de eventos discretos que pode fornecer um relato abrangente do que aconteceu em um aplicativo em um momento específico. Os logs de eventos podem vir em formato de texto simples, estruturado ou binário, mas todos os formatos contêm uma carga útil.
Com registros adequados, você pode identificar o comportamento imprevisível em um sistema e entender o que mudou no comportamento do sistema quando as coisas deram errado. Os registros podem ser estruturados ou não estruturados. Ao gerar registros, é importante garantir que eles possam ser lidos por humanos e máquinas. Portanto, é altamente recomendável ingerir logs de forma estruturada, de preferência no formato JSON, para que os sistemas de visualização de log possam indexar automaticamente e tornar os logs facilmente consultáveis.
Métricas
As métricas são a base do monitoramento. Eles são valores que expressam parte do estado interno de um sistema. Normalmente, as métricas são definidas como contagens ou medidas que são agregadas ao longo de um período de tempo.
As métricas informarão quanto da quantidade total de memória é usado por um método ou quantas solicitações um serviço trata por segundo. Conforme afirmado anteriormente, a menos que um sistema seja tornado observável, é impossível comparar as métricas.
Rastreamento
Um rastreamento descreve toda a jornada de uma solicitação conforme ela se move de um nó para outro em um sistema distribuído. Ele revela os efeitos não intencionais da solicitação e fornece visibilidade em sua estrutura. Para uma transação ou solicitação individual, um único rastreio exibe a operação conforme ela passa por um aplicativo.
Os rastreios permitem que você entre em detalhes de solicitações específicas para determinar quais componentes causam erros de sistema; para monitorar o fluxo através dos módulos; e para encontrar gargalos de desempenho.
Conclusão
O estudo da monitoração de ambientes de TI e da observabilidade do estado dos sistemas nos permite concluir que as boas práticas dos dois modelos permite desenvolver uma maior maturidade para as equipes responsáveis pelos sistemas que sustentam qualquer negócio.
Por termos experiência de quase 20 anos com sistemas de monitoração, podemos afirmar que essa maturidade só vem com o tempo. Caso sua empresa deseje pular algumas etapas e melhorar tanto o monitoramento como a observabilidade dos sistemas, não deixe de entrar em contato com nossos especialistas.