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

Observabilidade com OpenTelemetry

Fernando ike
October 23, 2021

Observabilidade com OpenTelemetry

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

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

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