juraci paixão kröhling - developermarch · juraci paixão kröhling software engineer great...
TRANSCRIPT
Juraci Paixão KröhlingSoftware EngineerGreat International Developer Summit2019-04-25
Advanced Distributed Tracing
twitter.com/jpkrohling
CONTEXT
DISTRIBUTED SYSTEMSSUCH AS MICROSERVICES
OBSERVABILITYCOMPLEMENTS METRICS, LOGS, ...
twitter.com/jpkrohling
BASICS
MEASURES UNITS OF WORKWHEN DID IT START, HOW LONG IT TOOK AND OTHER METADATA
CAUSALITYREFERENCES BETWEEN UNITS OF WORK
CONTEXT PROPAGATIONSIMILAR TO THE CONCEPT OF “CORRELATION ID”
twitter.com/jpkrohling
BASICS
INSTRUMENTATION“WHAT” TO RECORD
TRACER“HOW” TO RECORD
SAMPLING“WHEN” TO RECORD
twitter.com/jpkrohling
BASICS
twitter.com/jpkrohling
BASICS
twitter.com/jpkrohling
AVAILABLE TOOLS
INSTRUMENTATIONOPENTRACING, OPENCENSUS, BRAVE, AWS X-RAY, ...
TRACERJAEGER, OPENCENSUS, BRAVE, HAYSTACK, SKYWALKING, AWS X-RAY, ...
BACKEND+UIJAEGER, ZIPKIN, HAYSTACK, SKYWALKING, STACKDRIVER, AWS X-RAY, ...
twitter.com/jpkrohling
AVAILABLE TOOLS
INSTRUMENTATIONOPENTRACING, OPENCENSUS, BRAVE, AWS X-RAY, ...
TRACERJAEGER, OPENCENSUS, BRAVE, HAYSTACK, SKYWALKING, AWS X-RAY, ...
BACKEND+UIJAEGER, ZIPKIN, HAYSTACK, SKYWALKING, STACKDRIVER, AWS X-RAY, ...
twitter.com/jpkrohling
LIVE CODING
twitter.com/jpkrohling
CONTEXT PROPAGATION
HttpGet(“http://example.com”)
> GET / HTTP/1.1> Host: example.com> Accept: */*
Application
HTTP headers as TextMap
> GET / HTTP/1.1> Host: example.com> Accept: */*
OpenTracing
Inject operation
> GET / HTTP/1.1> Host: example.com> Accept: */*> uber-trace-id: abc
Jaeger
Outcome: HTTP request with extra header
twitter.com/jpkrohling
CONTEXT PROPAGATION
ServeGet(“http://example.com”)
> GET / HTTP/1.1> Host: example.com> Accept: */*> uber-trace-id: abc
Application
HTTP headers as TextMap
> GET / HTTP/1.1> Host: example.com> Accept: */*> uber-trace-id: abc
OpenTracing
Extract operation
> GET / HTTP/1.1> Host: example.com> Accept: */*> uber-trace-id: abc
Jaeger
Outcome: SpanContext to be used as parent span
twitter.com/jpkrohling
JAEGER
TRACERJAVA, GO, C++, C#, PYTHON, RUBY, ...
BACKENDAGENT, COLLECTOR, INGESTER, QUERY, UI
STORAGEIN-MEMORY, CASSANDRA, ELASTICSEARCH, BADGER, MORE TO COME
twitter.com/jpkrohling
JAEGER
Application
OpenTracing API
Jaeger Client
UdpSender HttpSender
Application Process
Jaeger All in OneHost
twitter.com/jpkrohling
JAEGER
Application
OpenTracing API
Jaeger Client
UdpSender HttpSender
Application Process
Jaeger AgentHost
Storage
Ingester
Collector
Query
UI
Writes toReads from
twitter.com/jpkrohling
DEPLOYING JAEGER
BARE METAL
$ ./jaeger-all-in-one
or:
$ ./jaeger-agent$ ./jaeger-collector
twitter.com/jpkrohling
DEPLOYING JAEGER
DOCKER
$ docker run \ -p 16686:16686 \ -p 14268:14268 \ ... jaegertracing/all-in-one:1.11
twitter.com/jpkrohling
DEPLOYING JAEGER
KUBERNETES - HELM
$ helm install incubator/jaeger \ --name my-jaeger
twitter.com/jpkrohling
DEPLOYING JAEGER
KUBERNETES - OPERATOR
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: my-jaeger
spec:
strategy: production
storage:
type: elasticsearch
twitter.com/jpkrohling
WHERE TO GO FROM HERE
DAPPERBY BENJAMIN H. SIGELMAN ET AL, GOOGLE RESEARCH, 2010
MASTERING DISTRIBUTED TRACINGBY YURI SHKURO, PACKT PUB, 2019
twitter.com/jpkrohling
JOIN US
OPENTRACINGhttps://gitter.im/opentracing/public
JAEGERhttps://gitter.im/jaegertracing/Lobby
twitter.com/jpkrohling
Q&A