client_golang/prometheus
Robert Fratto 83d56b1144
Extend prometheus.Registry to implement Collector (#1103)
* prometheus: implement Collector interface for Registry

This change allows Registries to be used as Collectors.

This enables new instances of Registry to be passed to ephemeral
subroutines for collecting metrics from subroutines which are still
running:

```go
package main

import (
  "fmt"

  "github.com/prometheus/client_golang/prometheus"
)

func main() {
  globalReg := prometheus.NewRegistry()

  for i := 0; i < 100; i++ {
    workerReg := prometheus.WrapRegistererWith(prometheus.Labels{
      // Add an ID label so registered metrics from workers don't
      // collide.
      "worker_id": fmt.Sprintf("%d", i),
    }, prometheus.NewRegistry()

    globalReg.MustRegister(workerReg)

    go func(i int) {
      runWorker(workerReg)

      // Unregister any metrics the worker may have created.
      globalReg.Unregister(workerReg)
    }(i)
  }
}

// runWorker runs a worker, registering worker-specific metrics.
func runWorker(reg *prometheus.Registry) {
  // ... register metrics ...
  // ... do work ...
}
```

This change makes it easier to avoid leaking metrics from subroutines
which do not consistently properly unregister metrics.

Signed-off-by: Robert Fratto <robertfratto@gmail.com>

* fix grammar in doc comment

Signed-off-by: Robert Fratto <robertfratto@gmail.com>

* document why Registry implements Collector with example

Signed-off-by: Robert Fratto <robertfratto@gmail.com>

Signed-off-by: Robert Fratto <robertfratto@gmail.com>
2022-08-23 11:09:29 +02:00
..
collectors collectors.GoCollector: Added rule support for granular metric configuration. (#1102) 2022-08-05 19:37:46 +02:00
graphite Enable same linters as the Prometheus repo itself (#1056) 2022-06-17 09:04:06 +02:00
internal collectors.GoCollector: Added rule support for granular metric configuration. (#1102) 2022-08-05 19:37:46 +02:00
promauto Review feedback: add comment and tests for WrapRegistererWith. 2020-06-04 11:51:51 +01:00
promhttp Clarify exemplar(Add|Observe) by renaming to (add|observe)WithExemplar (#1122) 2022-08-22 17:31:08 +02:00
push fix assorted oddities found by golangci-lint (#1040) 2022-08-03 06:30:51 +02:00
testutil testutil: Add ScrapeAndCompare (#1043) 2022-08-05 16:27:47 +02:00
.gitignore Rearrange file and package per convention. 2013-04-04 15:27:09 +02:00
README.md Update status badgets 2021-06-23 10:12:43 +02:00
benchmark_test.go Add a benchmark for concurrent counter increments 2018-01-19 15:15:10 -08:00
build_info_collector.go Use the runtime/metrics package for the Go collector for 1.17+ (#955) 2022-01-16 16:41:56 +00:00
collector.go collectors.GoCollector: Added rule support for granular metric configuration. (#1102) 2022-08-05 19:37:46 +02:00
collector_test.go Enable same linters as the Prometheus repo itself (#1056) 2022-06-17 09:04:06 +02:00
counter.go Update documentation for exemplar label limit (#1095) 2022-07-27 17:45:49 +02:00
counter_test.go Raise exemplar labels limit from 64 to 128 (#1091) 2022-07-19 16:50:45 +02:00
desc.go Enable same linters as the Prometheus repo itself (#1056) 2022-06-17 09:04:06 +02:00
desc_test.go Add missing license headers 2018-08-22 13:53:56 +02:00
doc.go Remove obsolete references to `Untyped` from doc comments 2020-02-13 22:03:05 +01:00
example_clustermanager_test.go Nitpicking a doc comment 2018-11-20 13:41:38 +01:00
example_metricvec_test.go Enable same linters as the Prometheus repo itself (#1056) 2022-06-17 09:04:06 +02:00
example_timer_complex_test.go Enable same linters as the Prometheus repo itself (#1056) 2022-06-17 09:04:06 +02:00
example_timer_gauge_test.go Enable same linters as the Prometheus repo itself (#1056) 2022-06-17 09:04:06 +02:00
example_timer_test.go Enable same linters as the Prometheus repo itself (#1056) 2022-06-17 09:04:06 +02:00
examples_test.go fix assorted oddities found by golangci-lint (#1040) 2022-08-03 06:30:51 +02:00
expvar_collector.go Add new collectors package 2021-05-08 10:43:31 +09:00
expvar_collector_test.go Simplify if expr in ExampleNewExpvarCollector() 2018-04-13 23:23:52 +02:00
fnv.go Add missing license headers 2018-08-22 13:53:56 +02:00
gauge.go Export MetricVec (again) 2020-10-15 14:32:54 +02:00
gauge_test.go fix tests warning about string(int) type conversions 2020-07-06 21:19:31 +09:00
gen_go_collector_metrics_set.go Generate new Go runtime metrics for go 1.19 (#1105) 2022-08-05 15:48:33 +02:00
get_pid.go Fix build against GopherJS (#897) 2022-08-05 16:28:54 +02:00
get_pid_gopherjs.go Fix build against GopherJS (#897) 2022-08-05 16:28:54 +02:00
go_collector.go collectors.GoCollector: Added rule support for granular metric configuration. (#1102) 2022-08-05 19:37:46 +02:00
go_collector_go116.go gocollector: Added options to Go Collector for changing the (#1031) 2022-04-13 09:55:22 +01:00
go_collector_go116_test.go Use the runtime/metrics package for the Go collector for 1.17+ (#955) 2022-01-16 16:41:56 +00:00
go_collector_latest.go collectors.GoCollector: Added rule support for granular metric configuration. (#1102) 2022-08-05 19:37:46 +02:00
go_collector_latest_test.go collectors.GoCollector: Added rule support for granular metric configuration. (#1102) 2022-08-05 19:37:46 +02:00
go_collector_metrics_go117_test.go Remove -Inf buckets from go collector histograms (#1049) 2022-05-13 10:04:45 +02:00
go_collector_metrics_go118_test.go Remove -Inf buckets from go collector histograms (#1049) 2022-05-13 10:04:45 +02:00
go_collector_metrics_go119_test.go Generate new Go runtime metrics for go 1.19 (#1105) 2022-08-05 15:48:33 +02:00
go_collector_test.go Use simpler locking in the Go 1.17 collector (#975) 2022-01-25 08:43:45 +01:00
histogram.go Add exemplar support for const histogram and const metric (#986) 2022-03-17 11:30:41 +00:00
histogram_test.go Enable same linters as the Prometheus repo itself (#1056) 2022-06-17 09:04:06 +02:00
labels.go fix assorted oddities found by golangci-lint (#1040) 2022-08-03 06:30:51 +02:00
metric.go Fixed support for unordered input of exemplars. (#1100) 2022-08-02 11:32:30 +02:00
metric_test.go Fixed support for unordered input of exemplars. (#1100) 2022-08-02 11:32:30 +02:00
num_threads.go Fix build against GopherJS (#897) 2022-08-05 16:28:54 +02:00
num_threads_gopherjs.go Fix build against GopherJS (#897) 2022-08-05 16:28:54 +02:00
observer.go Update documentation for exemplar label limit (#1095) 2022-07-27 17:45:49 +02:00
process_collector.go Fix build against GopherJS (#897) 2022-08-05 16:28:54 +02:00
process_collector_js.go Fix build against GopherJS (#897) 2022-08-05 16:28:54 +02:00
process_collector_other.go Fix build against GopherJS (#897) 2022-08-05 16:28:54 +02:00
process_collector_test.go Add new go:build lines for go 1.17 2021-12-17 23:38:35 +01:00
process_collector_windows.go feat: Change processMemoryCounters struct uint declaration to uintptr 2020-04-13 10:44:09 +08:00
process_collector_windows_test.go Implement process collector for Windows (#596) 2019-06-14 12:26:55 +02:00
registry.go Extend prometheus.Registry to implement Collector (#1103) 2022-08-23 11:09:29 +02:00
registry_test.go Extend prometheus.Registry to implement Collector (#1103) 2022-08-23 11:09:29 +02:00
summary.go Document implications of negative observations 2021-05-26 23:41:30 +02:00
summary_test.go fix tests warning about string(int) type conversions 2020-07-06 21:19:31 +09:00
timer.go Return observed duration from Timer.ObserveDuration 2018-12-03 21:10:34 +01:00
timer_test.go Enable same linters as the Prometheus repo itself (#1056) 2022-06-17 09:04:06 +02:00
untyped.go Remove the deprecated uses of Untyped metrics 2017-08-29 17:31:45 +02:00
value.go Raise exemplar labels limit from 64 to 128 (#1091) 2022-07-19 16:50:45 +02:00
value_test.go Add missing license headers 2018-08-22 13:53:56 +02:00
vec.go Enable same linters as the Prometheus repo itself (#1056) 2022-06-17 09:04:06 +02:00
vec_test.go Enable same linters as the Prometheus repo itself (#1056) 2022-06-17 09:04:06 +02:00
wrap.go Enable same linters as the Prometheus repo itself (#1056) 2022-06-17 09:04:06 +02:00
wrap_test.go Enable same linters as the Prometheus repo itself (#1056) 2022-06-17 09:04:06 +02:00

README.md

See Go Reference.