OpenTelemetry (OTel); CNCF tarafından yönetilen, metric, log ve trace üretmek için satıcı-bağımsız (vendor-agnostic) açık-kaynak standardıdır. 2019’da OpenTracing ve OpenCensus projelerinin birleşmesinden doğmuş; bugün Kubernetes’ten sonra CNCF’in en aktif ikinci projesi. Modern observability’nin lingua franca’sı olarak değerlendirilebilir.
OTel’in en önemli vaadi: kodunuza enstrümantasyon yazarsınız ve hangi backend’e (Datadog, Honeycomb, Grafana Tempo, AWS X-Ray, Jaeger) göndereceğiniz config meselesidir. Vendor değişimi kod değişimi gerektirmez. SDK’lar 11+ programlama dili için olgun durumda (Java, Python, Go, Node.js, .NET, Ruby, PHP, Rust, C++, Erlang, Swift).
Mono’nun yaklaşımı
Mono ekibi yeni yazılım projelerinde OpenTelemetry’i opsiyonel değil, varsayılan olarak kabul eder. Standart kurulumumuz:
- SDK: Auto-instrumentation ile başla (Java agent, Python
opentelemetry-instrument, NodeOTEL_NODE_RESOURCE_DETECTORS); kritik iş akışlarına manuel span’lar. - Resource attributes:
service.name,service.version,deployment.environment,service.instance.idminimum. - Collector pattern: Agent + Gateway. Agent (DaemonSet/sidecar) hızlı kabul; gateway batch + sampling + routing.
- Sampling: Head 5% + tail 100% (error trace’leri); ihtiyaç olursa probabilistic + always_on for critical spans.
- Exporter: OTLP gRPC tercih (HTTP/protobuf yedek); backend Grafana Stack default.
- Log correlation:
trace_id+span_idlog JSON’unda zorunlu — log → trace tek tıkla. - Metric: Histogram aggregation type explicit_buckets veya exponential (yeni); cumulative vs delta seçimi backend’e göre.
Tipik akış
- Uygulama OTel SDK ile span/metric/log üretir → OTLP olarak local agent‘a (4317 gRPC) gönderir.
- Agent kabul eder, hafif transformasyon, gateway’e iletir.
- Gateway batch + tail-sampling + filtering yapıp backend’e yönlendirir.
- Backend (Tempo/Mimir/Loki) veriyi saklar; Grafana sorgular.
- Operatör bir trace’ten log’a, log’tan metric’e tek tıkla geçer.
Yaygın sorunlar ve çözümler
- Yüksek cardinality:
userIdveyarequestIdresource attribute’a koyulamaz; sadece span attribute olarak. - Lost traces: Network MTU + gRPC timeout + retry config; collector buffer yeterli mi?
- Yavaş uygulama: Auto-instrumentation overhead’ı genelde %5’ten az, ama yoğun loop’lar etkilenebilir; production’da profil al.
- Vendor migration zor: Backend bağımlı
attributesset’i kullandıysanız (örn.aws.region). Standart konvansiyonlara (semantic conventions) bağlı kal. - Log volume patlaması: OTel log signal yeni; eski stdout log’ları paralel toplamayı düşür.
İlgili hizmetlerimiz
Sıkça sorulan sorular
OpenTelemetry zorunlu mu?
Auto-instrumentation mı manuel mi?
opentelemetry-instrument, Node --require @opentelemetry/auto-instrumentations-node/register). Belirli iş süreçlerini detaylı izlemek için manuel span’lar (tracer.startSpan("operation")). İkisi birlikte kullanılır.