Merge ~cgrabowski/maas:spike_prometheus_exporter into ~cgrabowski/maas:rack_region_redesign_spike

Proposed by Christian Grabowski
Status: Merged
Approved by: Christian Grabowski
Approved revision: b03c7698394ae0b56fc1600d5d2835257c3b2c54
Merge reported by: Christian Grabowski
Merged at revision: b03c7698394ae0b56fc1600d5d2835257c3b2c54
Proposed branch: ~cgrabowski/maas:spike_prometheus_exporter
Merge into: ~cgrabowski/maas:rack_region_redesign_spike
Diff against target: 134 lines (+61/-0)
4 files modified
src/rackd_spike/cmd/rackd.go (+7/-0)
src/rackd_spike/go.mod (+1/-0)
src/rackd_spike/go.sum (+7/-0)
src/rackd_spike/internal/metrics/prometheus.go (+46/-0)
Reviewer Review Type Date Requested Status
Christian Grabowski Approve
Alexsander de Souza (community) Approve
Review via email: mp+404859@code.launchpad.net

Commit message

add root metrics registry

add prometheus export

To post a comment you must log in.
Revision history for this message
Alexsander de Souza (alexsander-souza) wrote :

Just minor remarks

review: Approve
Revision history for this message
Christian Grabowski (cgrabowski) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/rackd_spike/cmd/rackd.go b/src/rackd_spike/cmd/rackd.go
2index 7e4d1e5..78d6ef3 100644
3--- a/src/rackd_spike/cmd/rackd.go
4+++ b/src/rackd_spike/cmd/rackd.go
5@@ -12,6 +12,7 @@ import (
6
7 "rackd/cmd/logger"
8 "rackd/cmd/subcommands"
9+ "rackd/internal/metrics"
10 )
11
12 type opts struct {
13@@ -53,6 +54,12 @@ var (
14 if err != nil {
15 return err
16 }
17+ rootMetricsRegistry := metrics.NewRegistry("")
18+ metricsSrvr, err := metrics.NewPrometheus("127.0.0.1", 9090, nil, rootMetricsRegistry) // TODO make bind address configurable and provide TLS config
19+ if err != nil {
20+ return err
21+ }
22+ defer metricsSrvr.Close()
23 log.Info().Msg("rackd started successfully")
24 sigChan := make(chan os.Signal)
25 signal.Notify(sigChan, syscall.SIGTERM, syscall.SIGINT)
26diff --git a/src/rackd_spike/go.mod b/src/rackd_spike/go.mod
27index c50f1cc..2a2e641 100644
28--- a/src/rackd_spike/go.mod
29+++ b/src/rackd_spike/go.mod
30@@ -3,6 +3,7 @@ module rackd
31 go 1.13
32
33 require (
34+ github.com/prometheus/client_golang v0.9.3
35 github.com/rs/zerolog v1.23.0
36 github.com/spf13/cobra v1.1.3
37 )
38diff --git a/src/rackd_spike/go.sum b/src/rackd_spike/go.sum
39index 4639daf..65479d3 100644
40--- a/src/rackd_spike/go.sum
41+++ b/src/rackd_spike/go.sum
42@@ -20,6 +20,7 @@ github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hC
43 github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
44 github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
45 github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
46+github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0=
47 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
48 github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
49 github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
50@@ -54,6 +55,7 @@ github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfb
51 github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
52 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
53 github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
54+github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
55 github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
56 github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
57 github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
58@@ -106,6 +108,7 @@ github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
59 github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
60 github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
61 github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
62+github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
63 github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
64 github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
65 github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
66@@ -128,12 +131,16 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE
67 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
68 github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
69 github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
70+github.com/prometheus/client_golang v0.9.3 h1:9iH4JKXLzFbOAdtqv/a+j8aewx2Y8lAjAydhbaScPF8=
71 github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
72 github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
73+github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE=
74 github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
75 github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
76+github.com/prometheus/common v0.4.0 h1:7etb9YClo3a6HjLzfl6rIQaU+FDfi0VSX39io3aQ+DM=
77 github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
78 github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
79+github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084 h1:sofwID9zm4tzrgykg80hfFph1mryUeLRsUfoocVVmRY=
80 github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
81 github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
82 github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
83diff --git a/src/rackd_spike/internal/metrics/prometheus.go b/src/rackd_spike/internal/metrics/prometheus.go
84new file mode 100644
85index 0000000..fbda27e
86--- /dev/null
87+++ b/src/rackd_spike/internal/metrics/prometheus.go
88@@ -0,0 +1,46 @@
89+package metrics
90+
91+import (
92+ "crypto/tls"
93+ "net"
94+ "net/http"
95+ "strconv"
96+
97+ "github.com/prometheus/client_golang/prometheus"
98+ "github.com/prometheus/client_golang/prometheus/promhttp"
99+)
100+
101+type Registry struct {
102+ prometheus.Registry
103+ Name string
104+}
105+
106+func NewRegistry(name string) *Registry {
107+ return &Registry{
108+ Registry: *prometheus.NewRegistry(),
109+ Name: name,
110+ }
111+}
112+
113+func NewPrometheus(host string, port int, tlsConf *tls.Config, registries ...*Registry) (*http.Server, error) {
114+ mux := http.NewServeMux()
115+ for _, registry := range registries {
116+ // TODO add HandlerOpts
117+ mux.Handle("/metrics/"+registry.Name, promhttp.HandlerFor(registry, promhttp.HandlerOpts{}))
118+ }
119+ addr := net.JoinHostPort(host, strconv.Itoa(port))
120+ srvr := &http.Server{
121+ Addr: addr,
122+ Handler: mux,
123+ TLSConfig: tlsConf,
124+ }
125+ listener, err := net.Listen("tcp", addr)
126+ if err != nil {
127+ return nil, err
128+ }
129+ if tlsConf != nil {
130+ listener = tls.NewListener(listener, tlsConf)
131+ }
132+ go srvr.Serve(listener)
133+ return srvr, nil
134+}

Subscribers

People subscribed via source and target branches

to all changes: