@@ -20,9 +20,11 @@ import (
20
20
"flag"
21
21
"log"
22
22
"net/http"
23
+ "time"
23
24
24
25
"github.com/prometheus/client_golang/prometheus"
25
26
"github.com/prometheus/client_golang/prometheus/collectors"
27
+ "github.com/prometheus/client_golang/prometheus/promauto"
26
28
"github.com/prometheus/client_golang/prometheus/promhttp"
27
29
)
28
30
@@ -33,12 +35,61 @@ func main() {
33
35
34
36
// Create a new registry.
35
37
reg := prometheus .NewRegistry ()
36
- prometheus . WrapRegistererWith (prometheus. Labels { "service" : "my-service-name" }, reg ) .MustRegister (
38
+ reg .MustRegister (
37
39
collectors .NewGoCollector (),
38
40
collectors .NewProcessCollector (collectors.ProcessCollectorOpts {}),
39
41
)
40
42
41
- // Expose the registered metrics via HTTP.
43
+ // We should see the following metrics with an extra source label. But
44
+ // other collectors registered above are expected not to have the extra
45
+ // label.
46
+ // See also https://prometheus.io/docs/instrumenting/writing_exporters/#target-labels-not-static-scraped-labels
47
+ startFireKeeper (prometheus .WrapRegistererWith (prometheus.Labels {"component" : "FireKeeper" }, reg ))
48
+ startSparkForge (prometheus .WrapRegistererWith (prometheus.Labels {"component" : "SparkForge" }, reg ))
49
+
42
50
http .Handle ("/metrics" , promhttp .HandlerFor (reg , promhttp.HandlerOpts {}))
43
51
log .Fatal (http .ListenAndServe (* addr , nil ))
44
52
}
53
+
54
+ func startFireKeeper (reg prometheus.Registerer ) {
55
+ firesMaintained := promauto .With (reg ).NewCounter (prometheus.CounterOpts {
56
+ Name : "fires_maintained_total" ,
57
+ Help : "Total number of fires maintained" ,
58
+ })
59
+
60
+ sparksDistributed := promauto .With (reg ).NewCounter (prometheus.CounterOpts {
61
+ Name : "sparks_distributed_total" ,
62
+ Help : "Total number of sparks distributed" ,
63
+ })
64
+
65
+ go func () {
66
+ for {
67
+ time .Sleep (5 * time .Second )
68
+ firesMaintained .Inc ()
69
+ log .Println ("FireKeeper maintained a fire" )
70
+ }
71
+ }()
72
+
73
+ go func () {
74
+ for {
75
+ time .Sleep (7 * time .Second )
76
+ sparksDistributed .Inc ()
77
+ log .Println ("FireKeeper distributed a spark" )
78
+ }
79
+ }()
80
+ }
81
+
82
+ func startSparkForge (reg prometheus.Registerer ) {
83
+ itemsForged := promauto .With (reg ).NewCounter (prometheus.CounterOpts {
84
+ Name : "items_forged_total" ,
85
+ Help : "Total number of items forged" ,
86
+ })
87
+
88
+ go func () {
89
+ for {
90
+ time .Sleep (6 * time .Second )
91
+ itemsForged .Inc ()
92
+ log .Println ("SparkForge forged an item" )
93
+ }
94
+ }()
95
+ }
0 commit comments