1
0
mirror of https://github.com/prometheus/docs.git synced 2026-02-05 15:45:27 +01:00

Remove usage of global registry from Go example

Signed-off-by: Kemal Akkoyun <kakkoyun@gmail.com>
This commit is contained in:
Kemal Akkoyun
2022-11-07 21:15:18 +01:00
committed by Kemal Akkoyun
parent ec0532c7c5
commit 292bc32602
2 changed files with 104 additions and 64 deletions

View File

@@ -29,11 +29,18 @@ package main
import (
"net/http"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/collectors"
"github.com/prometheus/client_golang/prometheus/promhttp"
)
func main() {
http.Handle("/metrics", promhttp.Handler())
reg := prometheus.NewRegistry()
reg.MustRegister(
collectors.NewGoCollector(),
collectors.NewProcessCollector(collectors.ProcessCollectorOpts{}),
)
http.Handle("/metrics", promhttp.HandlerFor(reg, promhttp.HandlerOpts{}))
http.ListenAndServe(":2112", nil)
}
```
@@ -66,26 +73,35 @@ import (
"github.com/prometheus/client_golang/prometheus/promhttp"
)
func recordMetrics() {
type metrics struct {
opsProcessed prometheus.Counter
}
func newMetrics(reg prometheus.Registerer) *metrics {
m := &metrics{
opsProcessed: promauto.With(reg).NewCounter(prometheus.CounterOpts{
Name: "myapp_processed_ops_total",
Help: "The total number of processed events",
}),
}
return m
}
func recordMetrics(m *metrics) {
go func() {
for {
opsProcessed.Inc()
m.opsProcessed.Inc()
time.Sleep(2 * time.Second)
}
}()
}
var (
opsProcessed = promauto.NewCounter(prometheus.CounterOpts{
Name: "myapp_processed_ops_total",
Help: "The total number of processed events",
})
)
func main() {
recordMetrics()
reg := prometheus.NewRegistry()
m := newMetrics(reg)
recordMetrics(m)
http.Handle("/metrics", promhttp.Handler())
http.Handle("/metrics", promhttp.HandlerFor(reg, promhttp.HandlerOpts{}))
http.ListenAndServe(":2112", nil)
}
```

View File

@@ -21,7 +21,7 @@ func ping(w http.ResponseWriter, req *http.Request){
}
func main() {
http.HandleFunc("/ping",ping)
http.HandleFunc("/ping", ping)
http.ListenAndServe(":8090", nil)
}
@@ -39,35 +39,47 @@ Now open `http://localhost:8090/ping` in your browser and you must see `pong`.
[![Server](/assets/docs/tutorial/server.png)](/assets/docs/tutorial/server.png)
Now lets add a metric to the server which will instrument the number of requests made to the ping endpoint,the counter metric type is suitable for this as we know the request count doesnt go down and only increases.
Now lets add a metric to the server which will instrument the number of requests made to the ping endpoint, the counter metric type is suitable for this as we know the request count doesnt go down and only increases.
Create a Prometheus counter
```go
var pingCounter = prometheus.NewCounter(
type metrics struct {
pingCounter prometheus.Counter
}
func newMetrics(reg prometheus.Registerer) *metrics {
m := &metrics{
pingCounter: promauto.With(reg).NewCounter(
prometheus.CounterOpts{
Name: "ping_request_count",
Help: "No of request handled by Ping handler",
},
)
```
Next lets update the ping Handler to increase the count of the counter using `pingCounter.Inc()`.
```go
func ping(w http.ResponseWriter, req *http.Request) {
pingCounter.Inc()
fmt.Fprintf(w, "pong")
}),
}
return m
}
```
Then register the counter to the Default Register and expose the metrics.
Next lets update the ping Handler to increase the count of the counter using `metrics.pingCounter.Inc()`.
```go
func ping(m *metrics) func(w http.ResponseWriter, req *http.Request) {
return func(w http.ResponseWriter, req *http.Request) {
m.pingCounter.Inc()
fmt.Fprintf(w, "pong")
}
}
```
Then register the metrics (in this case only one counter) to a Prometheus Register and expose the metrics.
```go
func main() {
prometheus.MustRegister(pingCounter)
http.HandleFunc("/ping", ping)
http.Handle("/metrics", promhttp.Handler())
reg := prometheus.NewRegistry()
m := newMetrics(reg)
http.HandleFunc("/ping", ping(m))
http.Handle("/metrics", promhttp.HandlerFor(reg, promhttp.HandlerOpts{}))
http.ListenAndServe(":8090", nil)
}
```
@@ -76,6 +88,7 @@ The `prometheus.MustRegister` function registers the pingCounter to the default
To expose the metrics the Go Prometheus client library provides the promhttp package.
`promhttp.Handler()` provides a `http.Handler` which exposes the metrics registered in the Default Register.
The sample code depends on the
The sample code depends on the
```go
@@ -86,33 +99,44 @@ import (
"net/http"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promauto"
"github.com/prometheus/client_golang/prometheus/promhttp"
)
var pingCounter = prometheus.NewCounter(
type metrics struct {
pingCounter prometheus.Counter
}
func newMetrics(reg prometheus.Registerer) *metrics {
m := &metrics{
pingCounter: promauto.With(reg).NewCounter(
prometheus.CounterOpts{
Name: "ping_request_count",
Help: "No of request handled by Ping handler",
},
)
}),
}
return m
}
func ping(w http.ResponseWriter, req *http.Request) {
pingCounter.Inc()
func ping(m *metrics) func(w http.ResponseWriter, req *http.Request) {
return func(w http.ResponseWriter, req *http.Request) {
m.pingCounter.Inc()
fmt.Fprintf(w, "pong")
}
}
func main() {
prometheus.MustRegister(pingCounter)
reg := prometheus.NewRegistry()
m := newMetrics(reg)
http.HandleFunc("/ping", ping)
http.Handle("/metrics", promhttp.Handler())
http.HandleFunc("/ping", ping(m))
http.Handle("/metrics", promhttp.HandlerFor(reg, promhttp.HandlerOpts{}))
http.ListenAndServe(":8090", nil)
}
```
Run the example
```sh
```bash
go mod init prom_example
go mod tidy
go run server.go