Prometheus Metriken in Go (Golang): Kompletter Leitfaden für Monitoring

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Prometheus Metriken in Go (Golang): Kompletter Leitfaden

Prometheus ist ein Open-Source-Monitoring-System, das sich zum De-facto-Standard für die Erfassung und Analyse von Metriken in modernen Microservice-Architekturen entwickelt hat. Im Go-Ökosystem (Golang) bietet die Bibliothek prometheus/client_golang ein leistungsstarkes und flexibles Toolkit zur Instrumentierung von Anwendungen. In diesem Artikel zeigen wir Ihnen Schritt für Schritt, wie Sie Prometheus-Metriken in Ihre Go-Anwendung einbinden, HTTP-Endpunkte konfigurieren und eigene Metriktypen erstellen.

Installation und Einrichtung

Zunächst müssen Sie den offiziellen Prometheus-Client für Go installieren:

go get github.com/prometheus/client_golang/prometheus
go get github.com/prometheus/client_golang/prometheus/promhttp

Die erste Bibliothek stellt den Kern zum Erstellen und Registrieren von Metriken bereit, die zweite einen fertigen HTTP-Handler für den Endpunkt /metrics.

Basistypen von Prometheus-Metriken

Prometheus unterstützt vier grundlegende Metriktypen, die jeweils für bestimmte Aufgaben optimiert sind:

  • Counter (Zähler) — ein monoton steigender Wert. Ideal zum Zählen von Anfragen, Fehlern oder abgeschlossenen Aufgaben.
  • Gauge (Messer) — ein Wert, der sowohl steigen als auch fallen kann. Wird für aktuelle Temperaturen, Anzahl aktiver Verbindungen oder Warteschlangengrößen verwendet.
  • Histogram (Histogramm) — sammelt Beobachtungen (z. B. Antwortzeiten) und gruppiert sie in konfigurierbare "Buckets". Ermöglicht die Berechnung von Quantilen.
  • Summary (Zusammenfassung) — ähnlich wie ein Histogramm, berechnet Quantile jedoch auf Anwendungsebene. Empfohlen, wenn Quantile für die Geschäftslogik kritisch sind.

Praktisches Beispiel: HTTP-Server mit Metriken

Wir erstellen eine einfache Webanwendung, die die Anzahl der Anfragen, deren Dauer und die aktuell aktiven Verbindungen erfasst.

package main

import (
    "fmt"
    "net/http"
    "time"

    "github.com/prometheus/client_golang/prometheus"
    "github.com/prometheus/client_golang/prometheus/promhttp"
)

var (
    // Anfragenzähler mit Labels "method" und "endpoint"
    requestCounter = prometheus.NewCounterVec(
        prometheus.CounterOpts{
            Name: "http_requests_total",
            Help: "Gesamtzahl der HTTP-Anfragen",
        },
        []string{"method", "endpoint"},
    )

    // Histogramm für die Anfragedauer
    requestDuration = prometheus.NewHistogramVec(
        prometheus.HistogramOpts{
            Name:    "http_request_duration_seconds",
            Help:    "Histogramm der Anfragedauer in Sekunden",
            Buckets: prometheus.DefBuckets, // [0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10]
        },
        []string{"method", "endpoint"},
    )

    // Messer für aktive Verbindungen
    activeConnections = prometheus.NewGauge(
        prometheus.GaugeOpts{
            Name: "http_active_connections",
            Help: "Aktuelle Anzahl aktiver Verbindungen",
        },
    )
)

func init() {
    // Metriken im Prometheus-Register registrieren
    prometheus.MustRegister(requestCounter)
    prometheus.MustRegister(requestDuration)
    prometheus.MustRegister(activeConnections)
}

// Middleware umschließt jede HTTP-Anfrage zur Metrikerfassung
func metricsMiddleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // Zähler für aktive Verbindungen erhöhen
        activeConnections.Inc()
        defer activeConnections.Dec()

        start := time.Now()
        next.ServeHTTP(w, r)
        duration := time.Since(start).Seconds()

        // Metriken für die Anfrage erfassen
        requestCounter.WithLabelValues(r.Method, r.URL.Path).Inc()
        requestDuration.WithLabelValues(r.Method, r.URL.                    

Empfehlungen