From b236e1b000f590427edf17307d576a4012c99cde Mon Sep 17 00:00:00 2001 From: Lili Cosic Date: Mon, 25 Nov 2024 11:21:42 +0100 Subject: [PATCH] examples: Follow best practices and established naming conventions (#1650) * examples: Follow best practices and established naming conventions This is a nitpick but from my experience and understanding the best practice for label key naming is to use one word, otherwise using an underscore. Since this is an example users tend to copy, I think correcting it might be a good idea. Signed-off-by: Lili Cosic * examples: Switch custom labels example Signed-off-by: Lili Cosic --------- Signed-off-by: Lili Cosic Co-authored-by: Kemal Akkoyun --- examples/customlabels/main.go | 55 +++++++++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 2 deletions(-) diff --git a/examples/customlabels/main.go b/examples/customlabels/main.go index fcfce29..799e052 100644 --- a/examples/customlabels/main.go +++ b/examples/customlabels/main.go @@ -20,9 +20,11 @@ import ( "flag" "log" "net/http" + "time" "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" ) @@ -33,12 +35,61 @@ func main() { // Create a new registry. reg := prometheus.NewRegistry() - prometheus.WrapRegistererWith(prometheus.Labels{"serviceName": "my-service-name"}, reg).MustRegister( + reg.MustRegister( collectors.NewGoCollector(), collectors.NewProcessCollector(collectors.ProcessCollectorOpts{}), ) - // Expose the registered metrics via HTTP. + // We should see the following metrics with an extra source label. But + // other collectors registered above are expected not to have the extra + // label. + // See also https://prometheus.io/docs/instrumenting/writing_exporters/#target-labels-not-static-scraped-labels + startFireKeeper(prometheus.WrapRegistererWith(prometheus.Labels{"component": "FireKeeper"}, reg)) + startSparkForge(prometheus.WrapRegistererWith(prometheus.Labels{"component": "SparkForge"}, reg)) + http.Handle("/metrics", promhttp.HandlerFor(reg, promhttp.HandlerOpts{})) log.Fatal(http.ListenAndServe(*addr, nil)) } + +func startFireKeeper(reg prometheus.Registerer) { + firesMaintained := promauto.With(reg).NewCounter(prometheus.CounterOpts{ + Name: "fires_maintained_total", + Help: "Total number of fires maintained", + }) + + sparksDistributed := promauto.With(reg).NewCounter(prometheus.CounterOpts{ + Name: "sparks_distributed_total", + Help: "Total number of sparks distributed", + }) + + go func() { + for { + time.Sleep(5 * time.Second) + firesMaintained.Inc() + log.Println("FireKeeper maintained a fire") + } + }() + + go func() { + for { + time.Sleep(7 * time.Second) + sparksDistributed.Inc() + log.Println("FireKeeper distributed a spark") + } + }() +} + +func startSparkForge(reg prometheus.Registerer) { + itemsForged := promauto.With(reg).NewCounter(prometheus.CounterOpts{ + Name: "items_forged_total", + Help: "Total number of items forged", + }) + + go func() { + for { + time.Sleep(6 * time.Second) + itemsForged.Inc() + log.Println("SparkForge forged an item") + } + }() +}