client_golang/prometheus
Michael Knyszek 85206714ae
Use simpler locking in the Go 1.17 collector (#975)
A previous PR made it so that the Go 1.17 collector locked only around
uses of rmSampleBuf, but really that means that Metric values may be
sent over the channel containing some values from future metrics.Read
calls. While generally-speaking this isn't a problem, we lose any
consistency guarantees provided by the runtime/metrics package.

Also, that optimization to not just lock around all of Collect was
premature. Truthfully, Collect is called relatively infrequently, and
its critical path is fairly fast (10s of µs). To prove it, this change
also adds a benchmark.

name            old time/op  new time/op  delta
GoCollector-16  43.7µs ± 2%  43.2µs ± 2%   ~     (p=0.190 n=9+9)

Note that because the benchmark is single-threaded it actually looks
like it might be getting *slightly* faster, because all those Collect
calls for the Metrics are direct calls instead of interface calls.

Signed-off-by: Michael Anthony Knyszek <mknyszek@google.com>
2022-01-25 08:43:45 +01:00
..
collectors Add new go:build lines for go 1.17 2021-12-17 23:38:35 +01:00
graphite fix tests 2019-10-23 00:15:54 +05:00
internal Use the runtime/metrics package for the Go collector for 1.17+ (#955) 2022-01-16 16:41:56 +00:00
promauto Review feedback: add comment and tests for WrapRegistererWith. 2020-06-04 11:51:51 +01:00
promhttp go.*: Update dependencies (#965) 2022-01-18 20:32:44 +01:00
push Fix typo 2021-11-25 11:21:10 +03:00
testutil testutil/promlint: allow Kelvin as a base unit for color temperature 2020-05-28 11:54:54 -04: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 Make the Go 1.17 collector thread-safe (#969) 2022-01-21 08:34:45 +01:00
collector_test.go Add a DescribeByCollect helper 2018-09-05 14:10:51 +02:00
counter.go Use the runtime/metrics package for the Go collector for 1.17+ (#955) 2022-01-16 16:41:56 +00:00
counter_test.go go.*: Update dependencies (#965) 2022-01-18 20:32:44 +01:00
desc.go Fix linter ignores 2021-03-16 17:19:03 +01: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 Fix linter ignores 2021-03-16 17:19:03 +01:00
example_timer_complex_test.go fix spelling typo 2017-08-28 08:57:51 +08:00
example_timer_gauge_test.go Fix invalid Timer (gauge) example 2017-02-28 11:13:17 -04:00
example_timer_test.go Change the Timer API 2016-11-18 20:32:18 +01:00
examples_test.go Fix linter ignores 2021-03-16 17:19:03 +01: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 Use the runtime/metrics package for the Go collector for 1.17+ (#955) 2022-01-16 16:41:56 +00:00
go_collector.go Use the runtime/metrics package for the Go collector for 1.17+ (#955) 2022-01-16 16:41:56 +00:00
go_collector_go116.go Use the runtime/metrics package for the Go collector for 1.17+ (#955) 2022-01-16 16:41:56 +00: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_go117.go Use simpler locking in the Go 1.17 collector (#975) 2022-01-25 08:43:45 +01:00
go_collector_go117_test.go Use simpler locking in the Go 1.17 collector (#975) 2022-01-25 08:43:45 +01:00
go_collector_metrics_go117_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_test.go Use simpler locking in the Go 1.17 collector (#975) 2022-01-25 08:43:45 +01:00
histogram.go add ExponentialBucketsRange function (#899) 2021-08-12 16:56:44 +01:00
histogram_test.go go.*: Update dependencies (#965) 2022-01-18 20:32:44 +01:00
labels.go Update code based on the PR feedback 2018-11-02 09:01:14 -07:00
metric.go Fix linter ignores 2021-03-16 17:19:03 +01:00
metric_test.go Change "Prometheus Team" to "The Prometheus Authors". 2015-02-02 15:14:36 +01:00
observer.go Pull out ...WithExemplar methods into separate interfaces 2020-01-27 15:41:13 +01:00
process_collector.go Add new collectors package 2021-05-08 10:43:31 +09:00
process_collector_other.go Add new go:build lines for go 1.17 2021-12-17 23:38:35 +01: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 Fix linter ignores 2021-03-16 17:19:03 +01:00
registry_test.go Fix linter ignores 2021-03-16 17:19:03 +01: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 new handler instrumentation (#285) 2017-04-24 15:13:19 -04:00
untyped.go Remove the deprecated uses of Untyped metrics 2017-08-29 17:31:45 +02:00
value.go go.*: Update dependencies (#965) 2022-01-18 20:32:44 +01:00
value_test.go Add missing license headers 2018-08-22 13:53:56 +02:00
vec.go Fix typo in comments 2021-02-08 08:58:51 +09:00
vec_test.go Allow currying of metric vec's 2017-12-22 15:56:11 +01:00
wrap.go Fix linter ignores 2021-03-16 17:19:03 +01:00
wrap_test.go Fix linter ignores 2021-03-16 17:19:03 +01:00

README.md

See Go Reference.