diff --git a/docs/tutorials/instrumenting_http_server_in_go.md b/docs/tutorials/instrumenting_http_server_in_go.md index 1d6a74ba0..d51ee0c22 100644 --- a/docs/tutorials/instrumenting_http_server_in_go.md +++ b/docs/tutorials/instrumenting_http_server_in_go.md @@ -71,11 +71,12 @@ func ping(m *metrics) func(w http.ResponseWriter, req *http.Request) { } ``` -Then register the metrics (in this case, only one counter) with a Prometheus registry and expose the metrics. +Then register the metrics with a Prometheus registry and expose them. Here we use a custom registry and also register the Go runtime collector with it. ```go func main() { reg := prometheus.NewRegistry() + reg.MustRegister(collectors.NewGoCollector()) m := newMetrics(reg) http.HandleFunc("/ping", ping(m)) @@ -84,9 +85,9 @@ func main() { } ``` -The `prometheus.MustRegister` function registers the pingCounter with the default registry. +The `promauto.With(reg).NewCounter()` function creates the pingCounter and registers it with the `reg` registry. To expose the metrics, the Go Prometheus client library provides the promhttp package. -`promhttp.Handler()` provides an `http.Handler` which exposes the metrics registered in the default registry. +`promhttp.HandlerFor(reg, promhttp.HandlerOpts{})` provides an `http.Handler` which exposes the metrics registered in the `reg` registry. The sample code is now: @@ -98,6 +99,7 @@ import ( "net/http" "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/collectors" "github.com/prometheus/client_golang/prometheus/promauto" "github.com/prometheus/client_golang/prometheus/promhttp" ) @@ -126,6 +128,7 @@ func ping(m *metrics) func(w http.ResponseWriter, req *http.Request) { func main() { reg := prometheus.NewRegistry() + reg.MustRegister(collectors.NewGoCollector()) m := newMetrics(reg) http.HandleFunc("/ping", ping(m)) @@ -147,7 +150,7 @@ Now hit the localhost:8090/ping endpoint a couple of times and then send a reque Here, the `ping_request_count` shows that the `/ping` endpoint was called 3 times. -The default registry comes with a collector for Go runtime metrics, and that is why we see other metrics like `go_threads`, `go_goroutines`, etc. +Unlike the default registry, a custom registry (`prometheus.NewRegistry()`) starts empty, so we registered the Go runtime collector explicitly with `reg.MustRegister(collectors.NewGoCollector())` (from `github.com/prometheus/client_golang/prometheus/collectors`). That is why we see other metrics like `go_threads`, `go_goroutines`, etc. We have built our first metric exporter. Let’s update our Prometheus config to scrape the metrics from our server. diff --git a/public/assets/docs/tutorial/ping_metric.png b/public/assets/docs/tutorial/ping_metric.png index 422cf0949..16fec05be 100644 Binary files a/public/assets/docs/tutorial/ping_metric.png and b/public/assets/docs/tutorial/ping_metric.png differ