Go语言服务网格可观测性:指标与追踪集成
Go语言服务网格可观测性:指标与追踪集成
1. Prometheus指标
package meshmetrics import ( "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promauto" ) var ( RequestsTotal = promauto.NewCounterVec( prometheus.CounterOpts{ Name: "requests_total", Help: "Total number of requests", }, []string{"service", "method", "status"}, ) RequestDuration = promauto.NewHistogramVec( prometheus.HistogramOpts{ Name: "request_duration_seconds", Help: "Request duration in seconds", Buckets: prometheus.DefBuckets, }, []string{"service", "method"}, ) ) func RecordRequest(service, method, status string, duration time.Duration) { RequestsTotal.WithLabelValues(service, method, status).Inc() RequestDuration.WithLabelValues(service, method).Observe(duration.Seconds()) }2. OpenTracing集成
package meshtrace import ( "github.com/opentracing/opentracing-go" ) type MeshTracer struct { tracer opentracing.Tracer } func NewMeshTracer(tracer opentracing.Tracer) *MeshTracer { return &MeshTracer{tracer: tracer} } func (t *MeshTracer) StartSpan(name string) opentracing.Span { return t.tracer.StartSpan(name) } func (t *MeshTracer) Inject(span opentracing.Span) (string, error) { carrier := make(map[string]string) err := t.tracer.Inject(span.Context(), opentracing.TextMap, carrier) if err != nil { return "", err } return SerializeHeaders(carrier), nil }3. 总结
服务网格的可观测性通过指标、追踪、日志实现,Go应用可以方便地集成这些能力。
