CodeBlanks Logo Icon CodeBlanks

OpenTelemetry

  • Go kursu
  • İleri seviye
  • Ders 62/68
  • 4 dk

OpenTelemetry SDK'nın Go'da temelini öğrenirsin.

OpenTelemetry

OpenTelemetry (OTel), trace, metrik ve logları üreticiden bağımsız biçimde toplamak için açık standarttır. Kodun bir kez OTel API'siyle yazılır; veriler Jaeger, Grafana Tempo, Datadog gibi istediğin arka uca exporter ile gönderilir.

tracer := otel.Tracer("siparis-servisi")
ctx, span := tracer.Start(ctx, "SiparisOlustur")
defer span.End()
span.SetAttributes(attribute.Int("urun_sayisi", 3))

SDK kurulumu ve otomatik araçlama

Program başında bir TracerProvider kurulur ve global yapılır; kapanışta Shutdown ile tampondaki span'ler gönderilir. otelhttp gibi hazır paketler HTTP sunucusu ve istemcisini otomatik izler:

handler := otelhttp.NewHandler(mux, "api")
client := http.Client{Transport: otelhttp.NewTransport(http.DefaultTransport)}

Böylece her istek için span açma ve traceparent başlığını taşıma işi kendiliğinden yapılır.

Uygulama Öznitelikli span

OTel benzeri bir yapı kur: type Span struct { Ad string; Attr map[string]any } ve func (s *Span) Set(k string, v any). Bir span oluştur, "urun_sayisi" = 3 ve "odeme" = "kart" ekle ve len(s.Attr) yazdır.

Başlangıç kodu

main.go
package main

import "fmt"

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import "fmt"

type Span struct {
    Ad   string
    Attr map[string]any
}

func (s *Span) Set(k string, v any) {
    if s.Attr == nil {
        s.Attr = map[string]any{}
    }
    s.Attr[k] = v
}

func main() {
    s := &Span{Ad: "SiparisOlustur"}
    s.Set("urun_sayisi", 3)
    s.Set("odeme", "kart")
    fmt.Println(len(s.Attr))
}

Beklenen çıktı

2

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Arka ucu Jaeger'dan Tempo'ya değiştirmek için ne değişir?

  • Go sürümü
  • Veritabanı
  • Yalnızca exporter ayarı Doğru cevap
  • Tüm span kodları

Açıklama: Uygulama kodu OTel API'sine bağlıdır; arka uç farkı SDK kurulumundaki exporter'da kalır.

2 Öznitelik ekle

Soru
span.____(attribute.String("kullanici", id))
Cevap
span.SetAttributes(attribute.String("kullanici", id))

Açıklama: SetAttributes span'e sorgulanabilir anahtar-değer bilgisi ekler.

3 OTel parçaları

Kavram Anlamı
API Kodun kullandığı arayüz
SDK Örnekleme ve işleme
Exporter Arka uca gönderir
otelhttp Otomatik HTTP izleme

İleri seviye bölümündeki tüm dersler