Ответ
В Go метрики собирают с помощью библиотек, таких как Prometheus, expvar или OpenTelemetry.
Prometheus (наиболее популярный):
import (
"net/http"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
)
var (
requests = prometheus.NewCounter(
prometheus.CounterOpts{
Name: "http_requests_total",
Help: "Total HTTP requests",
},
)
)
func init() {
prometheus.MustRegister(requests)
}
func handler(w http.ResponseWriter, r *http.Request) {
requests.Inc()
w.Write([]byte("OK"))
}
func main() {
http.HandleFunc("/", handler)
http.Handle("/metrics", promhttp.Handler())
http.ListenAndServe(":8080", nil)
}
expvar (встроенный пакет):
import (
"expvar"
"net/http"
)
var (
counter = expvar.NewInt("requests")
)
func handler(w http.ResponseWriter, r *http.Request) {
counter.Add(1)
w.Write([]byte("OK"))
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
Метрики можно экспортировать в формате JSON (/debug/vars
для expvar
) или Prometheus (через /metrics
).
OpenTelemetry (современный стандарт): Предоставляет унифицированный набор API и SDK для сбора телеметрии (метрик, трассировок, логов) и экспорта их в различные бэкенды. Это более универсальное решение, чем Prometheus или expvar по отдельности, так как охватывает все виды телеметрии.