Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Observabilidade com OpenTelemetry

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for Fernando ike Fernando ike
October 23, 2021

Observabilidade com OpenTelemetry

Apresentação realizada para o LinuxTips sobre Observabilidade com OpenTelemtry

- https://www.twitch.tv/videos/1172147054

Avatar for Fernando ike

Fernando ike

October 23, 2021
Tweet

More Decks by Fernando ike

Other Decks in Technology

Transcript

  1. 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
  2. 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/
  3. 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/
  4. 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
  5. 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!
  6. 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)
  7. 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.
  8. 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
  9. 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/
  10. 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.
  11. 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
  12. • tracer.start_span(name, parent=<span>, ...) ◦ 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/
  13. • 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/
  14. 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/
  15. 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
  16. 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