Share
Embed
Observabilidade com OpenTelemetry
Apresentação realizada para o LinuxTips sobre Observabilidade com OpenTelemtry
- https://www.twitch.tv/videos/1172147054
Fernando ike
October 23, 2021
Transcript
32 slides
-
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. -
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 -
• 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/ -
• 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/ -
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/ -
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/ -
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