Intro
Med mikroteneste-arkitektur kan det bli vanskelig å følga ein request gjennom ørten applikasjonar. Ein utviklar er jo som ofte ganske naken utan logging, og når ein request er innom mange ulike applikasjoner så kan det bli tungvint å få ein god oversikt over kan som har skjedd. Enter: Opentelemetry
https://opentelemetry.io/docs oppsummerer kva OpenTelemetry er:
OpenTelemetry, also known as OTel, is a vendor-neutral open source Observability framework for instrumenting, generating, collecting, and exporting telemetry data such as traces, metrics, and logs.
Der du før har vore avhengig av nøye utvalgt log-statements og eit rigid opplegg med headere i REST-requestar og Kafka-meldingar, så kan du ta i bruk OpenTelemetry og så voilà: bitane faller på plass. Som sagt, så gir OpenTelemetry deg både trace, metrics og log. Om du har ein Java/Kotlin-applikasjon kan du ta i bruk ein agent (https://github.com/open-telemetry/opentelemetry-java-instrumentation) som instrumenterer koden din. Agenten vil skanna etter kjende bibliotek og rammeverk. Dersom du f.eks bruker Ktor og Apache Kafka så vil agenten legga til bytekode "rundt" eksisterande kode for mottak av REST-requester og Kafka-meldingar. I dei fleste tilfella er agenten tilstrekkelig, men dersom du bruker eit bibliotek som ikkje er støtta så må ein ta i bruk OpenTelemetry sin eigen SDK (ev. bidra til at open source-prosjektet støtter det biblioteket)
Når applikasjonen din er instrumentert, så må du ha ein plass å senda telemetri-dataene. OpenTelemetry-Collector er laga for det formålet. Den tek i mot data frå din applikasjon (kan f.eks køyra som ein side-car i Kubernetes), prosesserer dataene og eksporterer det vidare til ønska destinasjon, f.eks Elastic APM, Jaeger og Splunk (sjå fullstendig liste her: (https://opentelemetry.io/ecosystem/vendors/)
Biletet under viser eit trace i Elastic APM. Her kan ein få ein god oversikt over applikasjonane som er involvert i ein REST-request (skjermdump viser langt frå alt!). Som ein rein bonus blir det lettare å avdekka eventuelle flaskehalser i verdikjeden din.
OpenTelemetry vil også legga til eit felt i MDC'en din. Under har eg funne ein PUT-request som eg vil sjå litt meir på:
Her kan eg bruka gitt trace.id til å sjå kva involverte applikasjoner har logga (søka på tvers av alle applikasjonar). Dette kan vera veldig kraftfull ifbm feilsøking.
Ha ei god observerbar jul!