Slide 1

Slide 1 text

Observabilidade com OpenTelemetry

Slide 2

Slide 2 text

Fernando Ike // linkedin.com/in/fernandoike // twitter.com/fernandoike // pontocafe.fernandoike.com

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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/

Slide 5

Slide 5 text

O que é Observabilidade?

Slide 6

Slide 6 text

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/

Slide 7

Slide 7 text

Telemetria Tele (Remoto) + Metron (Métricas/Medidas)

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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!

Slide 10

Slide 10 text

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)

Slide 11

Slide 11 text

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.

Slide 12

Slide 12 text

Distributed Tracing - Dapper https://logz.io/blog/distributed-tracing-dapper-jaeger/

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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/

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

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.

Slide 17

Slide 17 text

Otel spec v1

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

Distributed Tracing com OpenTelemetry

Slide 20

Slide 20 text

Distributed Tracing com OpenTelemetry https://opentelemetry.lightstep.com/core-concepts/context-propagation/

Slide 21

Slide 21 text

OTel Language SDKs Linguagens Tracing Metrics Logging C++ Pre-Alpha Pre-Alpha N/A .NET Stable Alpha Beta Erlang/Elixir Beta Alpha N/A Golang Release Candidate Alpha N/A Java Stable Alpha Experimental Javascript Stable Beta Alpha PHP Pre-Alpha Pre-Alpha N/A Python Stable Alpha N/A Ruby Beta Alpha N/A Rust Beta Alpha N/A Swift Beta Alpha N/A

Slide 22

Slide 22 text

● 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/

Slide 23

Slide 23 text

● 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/

Slide 24

Slide 24 text

Code examples (Python): Start/End def persist(data): tracer = trace.get_tracer(__name__) tracer.start_as_current_span("persistData") // do work… return result https://opentelemetry.io/

Slide 25

Slide 25 text

Automatic Instrumentation [python] from opentelemetry.ext import http_requests from opentelemetry.ext.flask import instrument_app // instrument Requests library http_requests.enable(trace.tracer_source()) // create flask app, then instrument app = Flask(__name__) instrument_app(app) https://opentelemetry.io/

Slide 26

Slide 26 text

Extensões, exporters e instrumentação ● https://opentelemetry.io/registry/

Slide 27

Slide 27 text

Demos

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

Extra

Slide 31

Slide 31 text

Como ver observabilidade?

Slide 32

Slide 32 text

Como ver observabilidade?