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. Observabilidade com
    OpenTelemetry

    View Slide

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

    View Slide

  3. 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

    View Slide

  4. 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/

    View Slide

  5. O que é
    Observabilidade?

    View Slide

  6. 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/

    View Slide

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

    View Slide

  8. 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

    View Slide

  9. 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!

    View Slide

  10. 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)

    View Slide

  11. 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.

    View Slide

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

    View Slide

  13. 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

    View Slide

  14. 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/

    View Slide

  15. View Slide

  16. 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.

    View Slide

  17. Otel spec v1

    View Slide

  18. View Slide

  19. Distributed Tracing com OpenTelemetry

    View Slide

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

    View Slide

  21. 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

    View Slide

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

    View Slide

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

    View Slide

  24. 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/

    View Slide

  25. 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/

    View Slide

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

    View Slide

  27. Demos

    View Slide

  28. 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

    View Slide

  29. 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

    View Slide

  30. Extra

    View Slide

  31. Como ver observabilidade?

    View Slide

  32. Como ver observabilidade?

    View Slide