Por que Obsevabilidade? ● Microsserviços criam uma interação complexa ● As falhas não são exatamente as mesmas ● "Debbuging" em serviços com múltiplos usos é difícil ● Monitoramento ("tradicional") não é o suficiente para ajudar
Sabemos o que está acontecendo? ● Quais as dependências existem? ● Qual o acoplamento com serviços fora do domínio? ● Os serviços são resilientes o suficiente quando uma dependência/acoplamento está falhando? ● Quais são as versões do serviço? https://logz.io/blog/distributed-tracing-dapper-jaeger/
O que é Observabilidade? Um sistema é "observável" de forma que você pode explicar o que está acontecendo por dentro apenas observando do lado de fora. https://www.honeycomb.io/blog/best-practices-for-observability/
Telemetria como suporte a Observabilidade ● Dados de Telemetria não é observabilidade. ● Instrumentação de código é como pegamos dados de telemetria ● Dados de telemetria pode incluir traces, logs e/ou métricas Todos são diferentes visões de uma mesma verdade
Métricas, logs e traces ● Métricas ○ Resumo de estatísticas agregadas. ● Logs ○ Informações detalhadas depuradas emitidas por processos. ● Distributed Tracing ○ Fornece insights de todo ciclo de vida, rastreando (traces) as requisições de um sistema, possibilitando encontrar pontos de falha e problemas de performance. Dados estruturados podem ser transmutados por qualquer destes!
Conceitos de métricas... ● Gauges (aferição) ○ Valor instantâneo (ex: % de uso de CPU) ● Contadores acumulativos ○ Soma cumulativa dos dados desde o processo de início (ex: contador de requests) ● Historigrama Cumulativo ○ Contadores agrupados para um conjunto de dados (ex: 0-10ms, 11-20ms) ● Rates (taxas) ○ A derivação de um contador (ex: requests por segundo) ● Agregação por tags ○ Dados que podem ser agrupados por tags compartilhadas (ex: hostname, nome do cluster)
Traces ● Span ○ Representam uma única unidade de trabalho de um sistema. ○ Ela encapsula: nome da operação, o intervalo de início e fim (timestamp), o identificador do span pai/mãe, a identificação do span e os itens do contexto. ● Trace ○ Ele é definido implicitamente por seus spans. Um trace pode ser pensado como um grafo de spans sem ciclo onde os limites entre os spans são definidos como um relacionamento pais e filhos. ● DistributedContext ○ Contém o tracing identificado, tags e opções que são propagadas dos span pai para os filhos.
Traces com Span Events ● Span Events são registros com base no contexto. ● Um evento contém a informação do período adicionada na informação adicionada para um span. ○ Contém: ■ nome do evento ■ um ou mais atributos do evento ■ período do evento
O que é Distributed Tracing É uma metodologia implementar por ferramentas de tracing para acompanhar, analisar e depurar transações através de múltiplos componentes de software. https://www.w3.org/TR/trace-context/
OpenCensus + OpenTracing = OpenTelemetry ● OpenTracing: ○ Fornece as APIS e instrumentação para o distributed tracing. ● OpenCensus: ○ Fornece APIs e instrumentação que permite coletar as métricas das aplicações e distributed tracing. ● OpenTelemetry: ○ Um esforço para combinar o distributed tracing, métricas e logging num único conjunto de componentes de sistema e bibliotecas específicas para linguagens de programção.
● tracer.start_span(name, parent=, ...) ○ This method returns a child of the specified span. ● with tracer.start_as_current_span(name) ○ Starts a new span, sets it to be active. Optionally, can get a reference to the span. ● tracer.get_current_span() ○ Used to access & add information to the current span OTel API (Python) - Tracer methods https://opentelemetry.io/
● span.add_event(name, attributes) ○ Adds structured annotations (e.g. "logs") about what is currently happening. ● span.set_attribute(key, value) ○ Adds an attribute to the current span. This may include a user id, a build id, a user-agent, etc. ● span.end() ○ Manually closes a span. OTel API (Python) - Span methods https://opentelemetry.io/
Para saber mais ● Dapper, a Large-Scale Distributed Systems Tracing Infrastructure - Google ● Mastering Distributed Tracing: Analyzing performance in microservices and complex systems ● W3C - Trace Context ● OpenTelemetry ● Jaeger ● FastAPI Blog
Por que Obsevabilidade? ● Microsserviços criam uma interação complexa ● As falhas não são exatamente as mesmas ● "Debbuging" em serviços com múltiplos usos é difícil ● Monitoramento ("tradicional") não é o suficiente para ajudar