Introdução sobre observabilidade

em sistemas distribuídos

Aluno: Reinan Gabriel Dos Santos Souza
Bacharelado em Sistemas de Informação
Instituto Federal de Sergipe
Campus Lagarto

19 de outubro de 2023

Reinan Gabriel Dos Santos Souza

Sou um entusiasta de tecnologia apaixonado por aprender e explorar novas áreas.

Desenvolvedor desde 2018
Engenheiro DevOps Pleno – MOVA

https://linktr.ee/reinanhs

Arquivos para a apresentação

Todos os materiais relacionados à apresentação do minicurso estão disponíveis digitalmente no meu repositório do Gitlab. Para acessar esses recursos, basta escanear o QR Code na imagem ao lado.

Gitlab: https://gitlab.com/snct-lagarto-2023
Github: https://github.com/ReinanHS

Introdução

À medida que os sistemas distribuídos se tornaram mais populares, os desenvolvedores enfrentam um desafio crescente:

  • Como solucionar problemas de software, considerando que ele pode ser composto por diversos serviços distintos, cada um executado em diferentes linguagens e plataformas?
  • Como detectar mudanças críticas que possam impactar todos os nossos microsserviços?
  • Como identificar as raízes reais dos erros?

Não muito tempo atrás, depurar um programa geralmente significava uma coisa: Navegar nos logs de erros

center

Mas as coisas em TI estão sempre mudando. Os paradigmas de arquitetura de software evoluíram de monólitos para microsserviços.

center

Com o surgimento do DevOps, os desenvolvedores agora têm novas responsabilidades. Isso significa que eles cuidam dos programas mesmo depois de serem entregues.

center

Por que a observabilidade é necessária?

A observabilidade é necessária para monitorar, detectar e resolver problemas em sistemas complexos, garantindo sua confiabilidade e desempenho.

Importância da observabilidade para o sucesso empresarial

A rapidez, a confiabilidade e o funcionamento contínuo do software afetam o desempenho da empresa, o que inclui o lucro, o trabalho eficiente e a felicidade dos clientes. É essencial garantir que todas as solicitações de aplicativos sejam processadas de forma rápida e precisa.

center

Por que o mundo precisa de observabilidade?

A observabilidade é ainda mais importante agora para as empresas por algumas razões:

  • Sistemas inteligentes em ascensão
  • Demanda por acesso aos dados
  • Requisitos de conformidade e precaução
A tendência em alta no mercado atual

Observabilidade está se destacando como uma abordagem amplamente adotada e valorizada no mercado atual.

Disponível em: https://trends.google.com.br/trends/explore. Acesso em: 19 out. 2023.

Complexidade de entender os serviços

A observabilidade é uma metodologia essencial para lidar com a complexidade dos microsserviços, que se tornaram uma tendência dominante no desenvolvimento de software.

center

Fonte da imagem: https://www.infoq.com/presentations/uber-microservices-distributed-tracing/

Para Leo Cavalcante (2022): “Observabilidade é a metodologia que o mercado de microsserviços e cloud-native explora para monitorar as aplicações”

Leo Cavalcante. Observabilidade com Hyperf e OpenTelemetry. Medium, 22, mar, 2022. Disponível em: https://medium.com/inside-picpay/observabilidade-com-hyperf-e-opentelemetry-dd698844eda. Acesso em: 18 maio. 2023.

A origem da observabilidade

O termo “observabilidade” teve sua origem no trabalho do engenheiro americano Rudolf E. Kálmán em agosto de 1960. conforme mencionado em seu livro “Teoria dos sistemas de controle” (On the general theory of control systems).

center

Link para o livro: https://www.sciencedirect.com/science/article/pii/S1474667017700948
Fonte para a imagem: https://pt.wikipedia.org/wiki/Rudolf_Kalman

Para Rudolf E. Kálmán a observabilidade é uma medida de quão bem os estados internos de um sistema podem ser inferidos a partir do conhecimento de suas saídas externas.

center

Fonte para a imagem: https://pt.wikipedia.org/wiki/Teoria_de_controle

Em suma, Rudolf E. Kálmán, lançou as bases do conceito de observabilidade, estabelecendo sua importância na determinação do estado interno dos sistemas.

center

Surgimento das primeiras equipes de observabilidade em 2013

Em 2013, a mudança para sistemas distribuídos já estava acontecendo.

Nesse ano, o X (anteriormente conhecido como 'Twitter') formou uma nova equipe, chamada 'equipe de observabilidade'.

O principal objetivo dessa equipe é coletar dados de telemetria de centenas de serviços do Twitter de forma centralizada e padronizada.

Publicação sobre observabilidade no Twitter

No final de 2013, a equipe de observabilidade do Twitter compartilhou um post no blog, descrevendo seus primeiros resultados ao usar a observabilidade na empresa. Eles também incluíram uma imagem mostrando o rastreamento de seus sistemas distribuídos.

center

Observability at Twitter: https://blog.twitter.com/engineering/en_us/a/2013/observability-at-twitter

center

Fonte da imagem: https://blog.twitter.com/engineering/en_us/a/2013/observability-at-twitter
Distributed Systems Tracing with Zipkin: https://blog.twitter.com/engineering/en_us/a/2012/distributed-systems-tracing-with-zipkin

Publicação sobre abordagem da observabilidade em 2016

O Twitter desempenhou um grande papel em popularizar o conceito de observabilidade na computação.

Em março de 2016, a equipe de engenharia de observabilidade do Twitter compartilhou o post Observability at Twitter: technical overview no blog explicando sua abordagem à observabilidade.

center

Observabilidade hoje

Hoje, a observabilidade é essencial para lidar com aplicativos complexos. Desenvolvedores, engenheiros de TI e equipes de DevOps não podem viver sem ela.

Princípios da observabilidade

A observabilidade se fundamenta em quatro pilares-chave:

center

Métricas

As métricas fornecem medidas quantitativas do desempenho e do comportamento dos sistemas.

  • Monitoramento de tendências
  • Identificação de padrões
  • Base para tomada de decisões
  • Otimização e escalonamento
Métricas

center

Fonte da imagem: https://www.keypup.io/blog/cloudtasker-monitor-your-cloud-tasks-jobs-on-gcp

RED Metrics

RED Metrics fornece aos desenvolvedores um modelo para instrumentar seus serviços e construir painéis de controle de forma consistente e repetível.

  • Rate: O número de solicitações que o serviço está processando por segundo.
  • Error: O número de solicitações com falha por segundo.
  • Duration: A quantidade de tempo que cada solicitação leve.
Logs

Os logs são registros detalhados das atividades e eventos que ocorrem em um sistema.

  • Ferramenta de depuração
  • Registro de eventos relevantes
  • Sequenciamento de eventos
  • Contexto e causa de problemas
Ilustração de logs com uma organização deficiente
18-08-23 12:34:56 - INFO - Dados ausentes
18-08-23 12:34:56 - Evento: INFO - Ocorreu algo inesperado no cadastro do produto.
18-08-23 12:34:56 - ERRO: 500 - Problema com o sistema. Algo deu errado.
  • Não identifica quais dados ou a causa da ausência.
  • A falta de clareza na descrição do evento torna difícil entender o que realmente aconteceu.
  • A mensagem de erro é vaga e não fornece informações úteis sobre o problema.
Dicas para melhorar a organização dos logs com pequenas configurações
'default' => [
    'handler' => [
        'class' => Monolog\Handler\StreamHandler::class,
        'constructor' => [
            'stream' => 'php://stdout',
            'messageType' => Monolog\Handler\ErrorLogHandler::OPERATING_SYSTEM,
            'level' => Monolog\Level::Info,
        ],
    ],
    'formatter' => [
        'class' => Monolog\Formatter\JsonFormatter::class,
        'constructor' => [
            'includeStacktraces' => true,
        ],
    ],
    'PsrLogMessageProcessor' => [
        'class' => Monolog\Processor\PsrLogMessageProcessor::class,
    ],
    'processors' => [
        new Monolog\Processor\GitProcessor(),
        new Monolog\Processor\MemoryUsageProcessor(),
        new Monolog\Processor\ProcessIdProcessor(),
        new Monolog\Processor\WebProcessor(),
    ],
]
Demonstração da organização de log para requisições

center

Explorando a organização de logs em casos de erros de validação

center

Análise de logs com Stack Traces: Exemplos e Insights

center

Rastreamento

O rastreamento, também conhecido como tracing, é a capacidade de acompanhar o fluxo de uma transação ou uma solicitação através de vários componentes de um sistema distribuído.

  • Visibilidade em sistemas distribuídos
  • Identificação de gargalos e problemas
  • Suporte à resolução de problemas
Rastreamento distribuído

center

Fonte da imagem: https://www.dynatrace.com/news/blog/open-observability-distributed-tracing-and-observability/

GCP Cloud Trace

center

Fonte da imagem: https://www.wix.com/velo/reference/velo-package-readmes/gcp-cloud-trace-integration

Contexto de rastreamento do B3 propagation

O B3 é uma especificação para o cabeçalho das requisições em nossa aplicação. Essa especificação define identificadores usados para agrupar uma operação em uma árvore de rastreamento.

center

Documentação oficial: https://github.com/openzipkin/b3-propagation
Exemplificação dos cabeçalhos do B3 — Fonte do autor

Exemplo em uma requisição HTTP usando o B3 propagation

center

Exemplificação dos cabeçalhos de uma solicitação Http usando B3 — Fonte do autor

Contexto de rastreamento do X-Cloud-Trace-Context
  • Ele é usado pelo Cloud Trace na GCP para correlacionar chamadas entre serviços e fornecer visibilidade da latência e do desempenho de um aplicativo.
"X-Cloud-Trace-Context: TRACE_ID/SPAN_ID;o=TRACE_TRUE"
curl "http://www.example.com" \
--header "X-Cloud-Trace-Context:105445aa7843bc8bf206b12000100000/1;o=1"

Fonte: https://cloud.google.com/trace/docs/setup?hl=pt-br

Observabilidade versus monitoramento

O monitoramento tradicional não funciona bem em sistemas complexos, como microsserviços e sistemas distribuídos. Ele só pode rastrear o que já é conhecido. Por exemplo:

  • Qual a taxa de requisições por segundo do meu aplicativo?
  • Quanta memória o Redis está usando?
  • Qual é a latência média de uma solicitação?

No entanto, no decorrer da manutenção de aplicações, muitas vezes precisamos ser capazes de responder a perguntas mais profundas como estas:

  • Onde está o gargalo no sistema causando latência para um endpoint específico?
  • O que mais mudou em meu sistema que pode estar causando esse erro?
  • Qual serviço preciso atualizar para corrigir esse erro?

center

Ferramentas de observabilidade

Selecionei algumas ferramentas para mostrar como a observabilidade é usada. Lembre-se de que existem outras opções disponíveis, mas escolhi as mais comuns. Veja abaixo os principais tópicos que vão ser falados:

  • Principais ferramentas para o monitoramento e análise de métricas.
  • Principais ferramentas para o rastreamento distribuído.
  • Principais ferramentas para o gerenciamento e centralização de logs.
Prometheus

O Prometheus é um sistema de monitoramento de código aberto amplamente utilizado que coleta e armazena métricas sobre sistemas e aplicativos. Ele fornece uma estrutura flexível para a coleta de dados de telemetria.

center

Grafana

O Grafana é uma plataforma de código aberto amplamente usada para visualização e monitoramento de dados em tempo real. Ele permite que os usuários criem painéis interativos e gráficos.

center

Jaeger

O Jaeger é uma plataforma de código aberto para rastreamento distribuído, projetada para monitorar e solucionar problemas em sistemas complexos, como microsserviços.

center

Zipkin

Outra ferramenta importante é o Zipkin. O Zipkin é outra plataforma de rastreamento distribuído de código aberto que oferece recursos semelhantes ao Jaeger.

center

Cloud Trace

O Cloud Trace é um sistema de rastreamento distribuído que coleta dados de latência dos aplicativos e os exibe no Console do Google Cloud.

  • US$ 0,20/milhão por trace processado

center

Graylog

O Graylog é uma plataforma de gerenciamento de registros e análise de dados de código aberto que oferece uma solução centralizada para coletar, armazenar, pesquisar e analisar registros de sistemas e aplicativos.

center

Cloud Logging

Gerenciamento de registros em tempo real e totalmente gerenciado com armazenamento, pesquisa, análise e alertas em escala de exabytes.

RECURSO PREÇO
Armazenamento do Logging US$ 0,50/GiB
Retenção de registros US$ 0,01/GiB

center

Fonte: https://cloud.google.com/logging

OpenTelemetry

OpenTelemetry é um projeto de código aberto que fornece um conjunto de APIs e SDKs para coletar, processar e exportar dados de telemetria de aplicativos e infraestrutura.

center

Destaque de outras ferramentas que merecem menção
Ferramenta Classificação Avaliações
Dynatrace 4.5 1398
New Relic 4.5 1358
Datadog 4.4 660
IBM Instana Observability 4.2 273
Amazon CloudWatch 4.4 217
Elastic Observability 4.5 159

Fonte: https://gartner.com/reviews/market/application-performance-monitoring-and-observability

Dica de uma excelente ferramenta para desenhar uma stack

center

Fonte: https://openapm.io/landscape

Explorando o uso dessas ferramentas em um cenário de exemplo

center

POC Distributed Tracing PHP

Agora, vamos explorar como essas ferramentas estão conectadas e como os dados estão fluindo entre elas em um nível de código. O primeiro passo para obter essas informações é acessar o repositório no GitHub listado abaixo:

center

Fonte: https://github.com/ReinanHS/poc-distributed-tracing-php

O que é service mesh?

Uma service mesh é uma camada de infraestrutura que fornece funcionalidades para a comunicação entre serviços em uma arquitetura de microsserviços. Ela é responsável por gerenciar o tráfego entre os serviços, fornecendo:

  • Gerenciamento de tráfego
  • Segurança
  • Observabilidade
  • Resiliência
O que é Istio?

Istio é uma service mesh open source criada pelo Google e pela IBM. É uma plataforma que permite aos desenvolvedores e equipes de operações gerenciar e proteger aplicativos baseados em microsserviços de forma eficiente.

  • Alcance uma rede de serviços consistente.
  • Proteja seus serviços com os benefícios do Istio.
  • Melhore o desempenho do aplicativo.
  • Alcance a observabilidade dos seus serviços.

Fonte: https://cloud.google.com/learn/what-is-istio?hl=pt-br

Observabilidade com o Istio

center

Apresentação prática de observabilidade com o Istio

Para entender melhor como nossos microsserviços estão se comportando, vamos usar o Istio, uma ferramenta que fornece informações de observabilidade. Para começar, vamos acessar o repositório no Gitlab listado abaixo.

center

Fonte: https://gitlab.com/snct-lagarto-2023/infrastructure-department/gcp-istio-poc

Conclusão

Espero que esta apresentação tenha fornecido uma visão inicial sobre os conceitos de observabilidade.

  • As tecnologias mencionadas ao longo desta publicação são importantes e amplamente utilizadas no mercado.
  • Selecionei algumas tecnologias que considerei relevantes e que podem ser utilizadas localmente por meio do Docker.
  • Lembre-se de que as ferramentas observabilidade são bastante poderosas para monitorar, depurar e otimizar seu projeto.
  • A observabilidade é um tema amplo e em constante evolução.
Perguntas e discussão

Agradeço a atenção de todos. Agora, vou separar um pequeno tempo para responder perguntas e dúvidas que possam ter surgido durante a minha explicação na apresentação.