Nâng CaoGolang iconGolang

Observability trong Go service: metrics với Prometheus thế nào?

Observability gồm 3 trụ cột: logs, metrics, traces.

Prometheus là tiêu chuẩn de facto cho metrics trong Go.

go
import (
    "github.com/prometheus/client_golang/prometheus"
    "github.com/prometheus/client_golang/prometheus/promhttp"
)

var (
    httpRequests = prometheus.NewCounterVec(
        prometheus.CounterOpts{
            Name: "http_requests_total",
            Help: "Total HTTP requests by status and method",
        },
        []string{"method", "status"},
    )

    httpDuration = prometheus.NewHistogramVec(
        prometheus.HistogramOpts{
            Name:    "http_request_duration_seconds",
            Help:    "HTTP request latency",
            Buckets: prometheus.DefBuckets,
        },
        []string{"method", "path"},
    )
)

func init() {
    prometheus.MustRegister(httpRequests, httpDuration)
}

// Middleware ghi metrics
func metricsMiddleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        start := time.Now()
        rw := &responseWriter{ResponseWriter: w, statusCode: 200}
        next.ServeHTTP(rw, r)
        duration := time.Since(start).Seconds()
        httpRequests.WithLabelValues(r.Method, fmt.Sprint(rw.statusCode)).Inc()
        httpDuration.WithLabelValues(r.Method, r.URL.Path).Observe(duration)
    })
}

// Expose /metrics endpoint
mux.Handle("/metrics", promhttp.Handler())

4 loại metrics: Counter (chỉ tăng), Gauge (tăng/giảm), Histogram (distribution + percentiles), Summary (similar Histogram).

Scrape bởi Prometheus server → visualize với Grafana.

Xem toàn bộ Golang cùng filter theo level & chủ đề con.

Mở danh sách Golang