40 lines
930 B
Go
40 lines
930 B
Go
package metrics
|
|
|
|
import (
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
"github.com/prometheus/client_golang/prometheus/collectors"
|
|
"github.com/prometheus/client_golang/prometheus/promhttp"
|
|
"log"
|
|
"net/http"
|
|
)
|
|
|
|
type MetricServer struct {
|
|
registry *prometheus.Registry
|
|
}
|
|
|
|
func New() *MetricServer {
|
|
registry := prometheus.NewRegistry()
|
|
// Add go runtime metrics and process collectors.
|
|
registry.MustRegister(
|
|
collectors.NewGoCollector(),
|
|
collectors.NewProcessCollector(collectors.ProcessCollectorOpts{}),
|
|
)
|
|
// Expose /metrics HTTP endpoint using the created custom registry.
|
|
http.Handle(
|
|
"/metrics", promhttp.HandlerFor(
|
|
registry,
|
|
promhttp.HandlerOpts{
|
|
EnableOpenMetrics: true,
|
|
}),
|
|
)
|
|
go func() {
|
|
log.Println(http.ListenAndServe(":8888", nil))
|
|
}()
|
|
return &MetricServer{
|
|
registry: registry,
|
|
}
|
|
}
|
|
|
|
func (s *MetricServer) Register(cs []prometheus.Collector) {
|
|
s.registry.MustRegister(cs...)
|
|
}
|