SDKs

SDK Go

Guia de instrumentação para serviços Go

Instalação

go get github.com/obtrace/sdk-go

Configuração

import (
  "os"
 
  ob "github.com/obtrace/sdk-go/pkg/obtrace"
)
 
client := ob.NewClient(ob.Config{
  APIKey: os.Getenv("OBTRACE_API_KEY"),
  TenantID: os.Getenv("OBTRACE_TENANT_ID"),
  ProjectID: os.Getenv("OBTRACE_PROJECT_ID"),
  AppID: "checkout-api",
  Env: os.Getenv("OBTRACE_ENV"),
  ServiceName: "checkout-api",
  ServiceVersion: os.Getenv("OBTRACE_SERVICE_VERSION"),
})

O SDK Go envia para:

  • POST /otlp/v1/logs
  • POST /otlp/v1/traces
  • POST /otlp/v1/metrics

Identidade canônica de runtime

runtimeAttrs := map[string]any{
  "cloud.region": os.Getenv("AWS_REGION"),
  "k8s.cluster.name": os.Getenv("CLUSTER_NAME"),
}

Início rápido

client.Log("INFO", "service.started", nil)
client.Metric(ob.SemanticMetrics.RuntimeCPUUtilization, 0.42, "1", nil)
client.Span("db.query", "", "", 0, "", map[string]any{
  "db.system": "postgresql",
  "feature.name": "checkout",
  "cloud.region": runtimeAttrs["cloud.region"],
})
_ = client.Flush(context.Background())

Exemplo com HTTP

http.HandleFunc("/healthz", func(w http.ResponseWriter, r *http.Request) {
  client.Log("INFO", "healthz.request", nil)
  client.Span("http.server GET /healthz", "", "", 0, "", map[string]any{
    "http.method": "GET",
    "http.route": "/healthz",
    "cloud.region": os.Getenv("AWS_REGION"),
  })
  _, _ = w.Write([]byte("ok"))
})

Checklist de validação

  • service, env e version estáveis entre deploys
  • um caminho real emite log e trace
  • não existe 401/403 na submissao OTLP
  • cloud.region existe quando o serviço é multi-região

Nesta página