Überwachung von Go-Anwendungen (Golang): Bibliotheken und Tools

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

Überwachung von Go-Anwendungen (Golang): Von Metriken bis zum Profiling



Go (Golang) ist eine Sprache, die für hochbelastbare Serveranwendungen entwickelt wurde. Doch selbst der leistungsfähigste Code kann Fehler, Speicherlecks oder unnötig hohe Latenzzeiten aufweisen. Ohne Überwachung riskieren Sie, erst von verärgerten Nutzern von einem Problem zu erfahren. In diesem Artikel behandeln wir die wichtigsten Bibliotheken und Tools zur Überwachung von Go-Anwendungen: von der Metrikenerfassung bis hin zu Tracing und Profiling.



Warum eine Go-Anwendung überwachen?

  • Leistung: Überwachung von Antwortzeiten, Anzahl der Goroutinen, CPU- und Speichernutzung.
  • Zuverlässigkeit: Kontrolle von Fehlern, Paniken und Neustartanzahl.
  • Skalierung: Verstehen, wann weitere Replikate hinzugefügt werden müssen.
  • Geschäftsmetriken: Anzahl der Anfragen, aktive Nutzer, verarbeitete Datenmengen.


1. Das integrierte Paket expvar

Der einfachste Weg ist expvar. Es stellt einen HTTP-Endpunkt mit grundlegenden Metriken bereit: Anzahl der Goroutinen, Speichernutzung, Betriebszeit. Geeignet für einen schnellen Start.

package main

import ( "expvar" "net/http")

var requestCount = expvar.NewInt("requests_total")

func handler(w http.ResponseWriter, r *http.Request) { requestCount.Add(1) w.Write([]byte("Hello, Go!"))}

func main() { http.HandleFunc("/", handler) // Metriken verfügbar unter /debug/vars http.ListenAndServe(":8080", nil)}

Starten Sie die Anwendung und öffnen Sie http://localhost:8080/debug/vars – Sie sehen ein JSON mit den Metriken.



2. Prometheus + prometheus/client_golang

Prometheus ist der De-facto-Standard für die Metrikenerfassung in Go. Die Bibliothek prometheus/client_golang ermöglicht die Registrierung benutzerdefinierter Metriken: Zähler, Histogramme, Zusammenfassungen.

package main

import ( "net/http" "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 number of HTTP requests.", }, []string{"method", "path"}, ))

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

func handler(w http.ResponseWriter, r *http.Request) { httpRequests.WithLabelValues(r.Method, r.URL.Path).Inc() w.Write([]byte("OK"))}

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

Der Endpunkt /metrics liefert Daten in einem Format, das Prometheus versteht. Anschließend können Dashboards in Grafana konfiguriert werden.



3. Profiling mit pprof

Das Paket net/http/pprof fügt Endpunkte für das Profiling hinzu: CPU, Speicher, Sperren, Goroutinen. Dies ist ein unverzichtbares Werkzeug zur Identifizierung von Engpässen.

package main

import ( "net/http" _ "net/http/pprof" // Profiler einbinden)

func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Profiling aktiv")) }) http.ListenAndServe(":6060", nil)}

Jetzt können Sie ausführen:

go tool pprof http://localhost:6060/debug/pprof/profile?seconds=30

Dies sammelt ein 30-Sekunden-CPU-Profil. Analysieren Sie es im interaktiven Modus oder exportieren Sie es als SVG/PDF.



4. OpenTelemetry – Tracing und Metriken

OpenTelemetry (OTel) ist der moderne Standard für Observability. Es vereint Metriken, Logs und Traces. Für Go gibt es das offizielle SDK go.opentelemetry.io/otel.

package main

import ( "context" "log" "net/http" "go.opentelemetry.io

Empfehlungen