Prometheus-Metriken in Go: Erstellung und Export von Metriken in Golang

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): vollständige Anleitung



Prometheus ist ein leistungsstarkes Open-Source-System für Monitoring und Alarmierung, das sich zum De-facto-Standard in der Welt der Cloud-Anwendungen entwickelt hat. Für die Sprache Go (Golang) gibt es den offiziellen Client prometheus/client_golang, mit dem Sie ganz einfach Metriken zu Ihrer Anwendung hinzufügen können. In diesem Artikel gehen wir im Detail darauf ein, wie Sie die Bibliothek installieren, die wichtigsten Metriktypen (Counter, Gauge, Histogram) erstellen und diese über HTTP exportieren.



1. Installation der Bibliothek



Um mit Prometheus in Go zu arbeiten, müssen Sie das Paket prometheus/client_golang installieren. Führen Sie den folgenden Befehl aus:



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


Das erste Paket enthält die grundlegenden Metriktypen, das zweite einen HTTP-Handler für den Export der Metriken in einem Format, das der Prometheus-Server versteht.



2. Grundlegende Metriktypen



Prometheus unterstützt vier grundlegende Metriktypen. Wir betrachten die drei gängigsten:



  • Counter — ein Zähler, der nur erhöht werden kann (z. B. Anzahl der Anfragen).
  • Gauge — ein Wert, der sowohl erhöht als auch verringert werden kann (z. B. Anzahl aktiver Verbindungen).
  • Histogram — ein Histogramm, das die Verteilung von Werten misst (z. B. Antwortzeit).


3. Beispiel: Counter (Anfragenzähler)



Erstellen wir einen einfachen HTTP-Server, der die Anzahl der verarbeiteten Anfragen zählt:



package main

import ( "fmt" "net/http" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp")

var ( requestsTotal = prometheus.NewCounter( prometheus.CounterOpts{ Name: "http_requests_total", Help: "Total number of HTTP requests.", }, ))

func init() { prometheus.MustRegister(requestsTotal)}

func handler(w http.ResponseWriter, r *http.Request) { requestsTotal.Inc() fmt.Fprintf(w, "Hello, you are visitor #%d", requestsTotal)}

func main() { http.HandleFunc("/", handler) http.Handle("/metrics", promhttp.Handler()) http.ListenAndServe(":8080", nil)}


In diesem Beispiel:

  • prometheus.NewCounter erstellt einen Zähler mit dem Namen http_requests_total.
  • prometheus.MustRegister registriert die Metrik im globalen Register.
  • requestsTotal.Inc() erhöht den Zähler bei jeder Anfrage um 1.
  • promhttp.Handler() exportiert alle registrierten Metriken unter der Adresse /metrics.


4. Beispiel: Gauge (aktive Verbindungen)



Gauge eignet sich ideal zur Überwachung des aktuellen Zustands, z. B. der Anzahl aktiver Goroutinen:



var (    activeGoroutines = prometheus.NewGauge(        prometheus.GaugeOpts{            Name: "active_goroutines",            Help: "Current number of active goroutines.",        },    ))

func monitorGoroutines() { for { activeGoroutines.Set(float64(runtime.NumGoroutine())) time.Sleep(5 * time.Second) }}

func main() { prometheus.MustRegister(activeGoroutines) go monitorGoroutines() // ... restlicher Code}


Hier setzt Set() den aktuellen Wert, während Inc() und Dec() es ermöglichen, den Gauge um eins zu erhöhen oder zu verringern.



5. Beispiel: Histogram (Antwortzeit)



Histogram sammelt Beobachtungen und verteilt sie auf konfigurierbare Segmente (Buckets):



var (    requestDuration = prometheus.NewHistogram(        prometheus.HistogramOpts{            Name:    "http_request_duration_seconds",            Help:    "Histogr                    

Empfehlungen