Überwachung von Go-Anwendungen: Metriken und Alarme von A bis Z
\n\nIn der modernen Softwareentwicklung ist Überwachung kein Luxus, sondern eine Notwendigkeit. Für Anwendungen in Go (Golang), die häufig in hochbelasteten Microservices und Infrastrukturprojekten eingesetzt werden, ermöglicht eine gut konfigurierte Überwachung, Probleme rechtzeitig zu erkennen, die Leistung zu optimieren und einen stabilen Betrieb zu gewährleisten. In diesem Artikel werden wir erläutern, wie Sie die Überwachung von Go-Anwendungen von Grund auf einrichten: von der Erfassung grundlegender Metriken bis zur Konfiguration von Alarmen und der Visualisierung in Grafana.
\n\nWarum ist Überwachung für Go-Anwendungen wichtig?
\n\nGo ist eine kompilierte Sprache mit integrierter Unterstützung für Nebenläufigkeit. Go-Anwendungen laufen oft in kritischen Systemen: von API-Gateways bis zu Datenbanken. Ohne Überwachung riskieren Sie:
\n- \n
- Speicherlecks oder Goroutine-Leaks zu übersehen \n
- Leistungseinbußen nicht zu bemerken \n
- Datenverlust durch nicht behandelte Fehler \n
- Ausfallzeiten aufgrund von Ressourcenknappheit \n
Die richtige Überwachung gibt Ihnen ein vollständiges Bild des Anwendungszustands: von CPU- und Speicherauslastung bis zu Antwortzeiten und Fehlerraten.
\n\nWichtige Metriken für die Go-Überwachung
\n\nBevor wir zu den Tools übergehen, definieren wir, welche Metriken für Go-Anwendungen kritisch sind:
\n\nSystemmetriken
\n- \n
- CPU usage – Prozessorauslastung \n
- Memory usage – Speicherverbrauch (einschließlich Heap und Stack) \n
- Goroutines count – Anzahl aktiver Goroutinen \n
- GC stats – Garbage-Collector-Statistiken (Zeit, Anzahl der Zyklen) \n
- Open file descriptors – Anzahl offener Dateideskriptoren \n
Geschäftsmetriken
\n- \n
- Request latency – Antwortzeit (p50, p95, p99) \n
- Request rate – Anzahl der Anfragen pro Sekunde \n
- Error rate – Fehlerprozentsatz \n
- Database connection pool – Zustand des Verbindungspools \n
Tools für die Go-Überwachung
\n\nDer Standard-Stack für die Überwachung von Go-Anwendungen umfasst:
\n- \n
- Prometheus – System zur Erfassung und Speicherung von Metriken \n
- Grafana – Visualisierung und Dashboards \n
- Alertmanager – Alarmverwaltung \n
- Go-Client-Bibliotheken – zum Export von Metriken \n
Einrichtung der Metrikerfassung in Go mit Prometheus
\n\nBeginnen wir mit der Praxis. Zum Export von Metriken aus einer Go-Anwendung verwenden wir die offizielle Bibliothek prometheus/client_golang.
Schritt 1: Abhängigkeiten installieren
\ngo get github.com/prometheus/client_golang/prometheus\ngo get github.com/prometheus/client_golang/prometheus/promhttp\n\nSchritt 2: Basis-HTTP-Server mit Metriken
\n\npackage main\n\nimport (\n "net/http"\n "github.com/prometheus/client_golang/prometheus"\n "github.com/prometheus/client_golang/prometheus/promhttp"\n)\n\nvar (\n httpRequestsTotal = prometheus.NewCounterVec(\n prometheus.CounterOpts{\n Name: "http_requests_total",\n Help: "Total number of HTTP requests",\n },\n []string{"method", "endpoint", "status"},\n )\n\n httpRequestDuration = prometheus.NewHistogramVec(\n prometheus.HistogramOpts{\n Name: "http_request_duration_seconds",\n Help: "Histogram of HTTP request durations",\n Buckets: prometheus.DefBuckets,\n },\n []string{"method", "endpoint"},\n )\n)\n\nfunc init() {\n prometheus.MustRegister(httpRequestsTotal)\n prometheus.MustRegister(httpRequestDuration)\n}\n\nfunc main() {\n http.Handle("/metrics", promhttp.Handler())\n \n http.HandleFunc("/api/users", func(w http.ResponseWrit