β˜€οΈSiang
DevOps & Cloud

OpenTelemetry: Observability untuk Developer

TOKEN

Panduan lengkap OpenTelemetry β€” distributed tracing, metrics collection, log correlation, exporters (Jaeger, Prometheus, Grafana), auto-instrumentation, dan best practices observability

Artikel: Opentelemetry Artikel: Opentelemetry


1. Pengenalan OpenTelemetry

OpenTelemetry (OTel) adalah framework open-source untuk observability β€” mengumpulkan, memproses, dan mengekspor telemetry data (traces, metrics, dan logs) dari aplikasi. OpenTelemetry adalah project CNCF (Cloud Native Computing Foundation) dengan kontribusi dari Google, Microsoft, Amazon, dan banyak perusahaan teknologi besar lainnya.

Sebelum OpenTelemetry, developer harus memilih vendor proprietary untuk observability β€” Datadog, New Relic, Dynatrace, dll. Setiap vendor memiliki SDK sendiri yang tidak kompatibel satu sama lain. OpenTelemetry mengubah ini dengan menyediakan standard universal yang bisa digunakan dengan backend apapun.

OpenTelemetry adalah merger dari dua project sebelumnya: OpenTracing (API standar untuk tracing) dan OpenCensus (SDK untuk metrics dan tracing). OTel menggabungkan yang terbaik dari keduanya menjadi satu standar unified yang mencakup traces, metrics, dan logs.

Mengapa OpenTelemetry?

Keunggulan Penjelasan
Vendor NeutralStandard universal β€” bisa export ke backend apapun (Jaeger, Prometheus, Grafana, Datadog, dll)
Multi-languageSDK tersedia untuk 11+ bahasa β€” Java, Python, Go, JavaScript, .NET, Rust, Swift, dll
CNCF ProjectDidukung oleh perusahaan besar β€” dijamin long-term sustainability
Auto-instrumentationInstrumentasi otomatis untuk framework populer β€” minimal code changes
Traces + Metrics + LogsSatu framework untuk semua tipe telemetry data
W3C StandardTrace context propagation mengikuti standar W3C
CorrelationOtomatis mengkorelasikan traces, metrics, dan logs
Production ReadyDigunakan oleh perusahaan besar di production
Diagram: OpenTelemetry Ecosystem
OpenTelemetry Ecosystem

πŸ“± Application

OTel API\n(stable)

OTel SDK\n(implementation)

Exporters\n(OTLP/gRPC)

πŸ”„ OTel Collector\n(receive/process/export)

Jaeger\n(Traces)

Prometheus\n(Metrics)

Grafana\n(Dashboard)

Loki\n(Logs)

OpenTelemetry vs Alternatif

Fitur OpenTelemetry Datadog New Relic
Harga🟒 Open-sourceπŸ”΄ Paid (mahal)🟑 Free tier + paid
Vendor Lock-in🟒 Tidak adaπŸ”΄ Terikat vendor🟑 Sedang
Data Ownership🟒 Full controlπŸ”΄ Di server vendor🟑 Sebagian
Setup🟑 Lebih kompleks🟒 Sangat mudah🟒 Mudah
BackendπŸ”΄ Perlu setup sendiri🟒 Managed🟒 Managed
Standardisasi🟒 CNCF StandardπŸ”΄ Proprietary🟑 Sebagian


2. Tiga Pilar Observability

OpenTelemetry mencakup tiga pilar observability yang saling terkorelasi:

Diagram: Tiga Pilar Observability
Tiga Pilar Observability

πŸ”­ TIGA PILAR OBSERVABILITY

πŸ“ LOGS\n'Apa yang terjadi?'\nTimestamp + Level + Message\nContoh: ERROR: DB connection timeout

πŸ“Š METRICS\n'Seberapa sehat sistem?'\nLatency, Error Rate, Throughput\nContoh: Latency 25ms, Error 0.1%

πŸ”— TRACES\n'Bagaimana request mengalir?'\nTrace ID β†’ Span A β†’ Span B β†’ Span C\nContoh: APIβ†’Userβ†’DB 30ms total

🎯 Grafana Dashboard\n(correlate all three)



3. Arsitektur OpenTelemetry

Komponen Utama

Komponen Fungsi
APIInterface yang digunakan aplikasi untuk membuat spans, metrics, dan logs. Stabil dan tidak berubah
SDKImplementasi dari API β€” processing, sampling, export. Bisa dikonfigurasi
CollectorProxy yang menerima, memproses, dan mengekspor telemetry data. Bisa di-deploy sebagai agent atau gateway
Instrumentation LibrariesLibrary yang otomatis instrumentasi framework populer (Express, Flask, Spring, dll)
ExportersKirim data ke backend (Jaeger, Prometheus, Grafana Tempo, Datadog, dll)
Context PropagationMenyebarluaskan trace context antar service (W3C TraceContext, Baggage)

Data Flow

Diagram
πŸ“¦ Order Service⚑ Redis CacheπŸ—„οΈ DatabaseπŸ‘€ User Service🌐 API GatewayπŸ–₯️ ClientπŸ“¦ Order Service⚑ Redis CacheπŸ—„οΈ DatabaseπŸ‘€ User Service🌐 API GatewayπŸ–₯️ ClientGET /api/order/123Validate UserQuery user (20ms)User dataCheck cache (5ms)Cache missUser validated (60ms)Get OrderQuery order (15ms)Order dataOrder details (20ms)Response ("total: 95ms")

Implementasi Tracing di Node.js

flowchart TD
    subgraph agent["πŸ”§ Agent Mode (per host)"]
    A1["App 1] --> CA[OTel Collector\nAgent"]
        A2[App 2] --> CA
        A3[App 3] --> CA
        CA -->|Forward| GW
    end
    
    subgraph gateway["🏭 Gateway Mode (centralized)"]
        GW["OTel Collector\nGateway"] --> J[Jaeger]
        GW --> P[Prometheus]
        GW --> G[Grafana]
        GW --> L[Loki]
    end

    style agent fill:#0f2a1f,stroke:#3ecf8e,stroke-width:2px
    style gateway fill:#0f1d3a,stroke:#60a5fa,stroke-width:2px
    style GW fill:#2a1f0a,stroke:#f59e0b,stroke-width:2px


11. Best Practices

Best Practice Detail
Load OTel FirstSelalu import/setup OpenTelemetry SEBELUM import library lain β€” agar auto-instrumentation bisa meng-hook library
Resource AttributesSet service.name, service.version, deployment.environment di semua service
SamplingGunakan sampling untuk production β€” jangan trace 100% request. Gunakan tail-based sampling untuk mempertahankan traces error
OTLP ProtocolGunakan OTLP (OpenTelemetry Protocol) sebagai default exporter β€” paling efisien dan universal
CollectorSelalu gunakan OTel Collector sebagai perantara β€” decouple app dari backend
Batch ProcessorGunakan batch processor untuk mengurangi jumlah export calls
Semantic ConventionsGunakan OTel semantic conventions untuk attribute names β€” konsisten antar service
Graceful ShutdownPanggil sdk.shutdown() saat SIGTERM untuk flush semua data yang belum ter-export
CardinalityHindari metric attributes dengan cardinality tinggi (misalnya user_id) β€” bisa memakan banyak memori
Context PropagationPastikan trace context di-propagate ke semua service calls β€” HTTP headers, message queue headers
πŸ’‘ Tips

Mulai dengan auto-instrumentation untuk mendapatkan visibility cepat tanpa banyak code changes. Setelah terbiasa, tambahkan manual instrumentation untuk business-critical paths yang memerlukan detail lebih. Gunakan Grafana + Prometheus + Jaeger + Loki sebagai stack observability open-source yang lengkap.

⚠️ Peringatan

Hati-hati dengan high cardinality attributes pada metrics β€” atribut seperti user_id atau request_id bisa menghasilkan jutaan time series yang memakan banyak memori di Prometheus. Simpan high-cardinality data di traces dan logs, bukan di metrics.



12. Quiz Pemahaman

πŸ“ Quiz: Pemahaman OpenTelemetry

1. Apa tiga pilar observability yang dicakup OpenTelemetry?

2. Apa itu "span" dalam distributed tracing?

3. Mengapa OpenTelemetry lebih baik dari vendor proprietary?

4. Apa fungsi OpenTelemetry Collector?

5. Apa itu "auto-instrumentation" di OpenTelemetry?

πŸ” Zoom
100%
🎨 Tema