Björn Rabenstein
b5bfa0eb2c
Merge pull request #457 from prometheus/beorn7/histogram
...
Lock-free atomic observations in Histograms!
2018-09-12 15:04:00 +02:00
beorn7
1b2bd1d665
Make Histogram observations atomic while keeping them lock-free
...
Fixes #275
This is rather tricky and required some studying of the Go memory
model. I have added copious code comments to explain what's going on.
Benchmarks haven't changed significantly, despite the additional
atomic operations now required during Observe. Write performance is
noticable, but it is also much more involved now and has a mutex. (But
note that Write is supposed to be a relatively rare operation and thus
not in the hot path compared to Observe.) Allocs haven't changed at
all.
OLD:
BenchmarkHistogramWithLabelValues-4 10000000 151 ns/op 0 B/op 0 allocs/op
BenchmarkHistogramNoLabels-4 50000000 36.0 ns/op 0 B/op 0 allocs/op
BenchmarkHistogramObserve1-4 50000000 28.1 ns/op 0 B/op 0 allocs/op
BenchmarkHistogramObserve2-4 10000000 160 ns/op 0 B/op 0 allocs/op
BenchmarkHistogramObserve4-4 5000000 378 ns/op 0 B/op 0 allocs/op
BenchmarkHistogramObserve8-4 2000000 768 ns/op 0 B/op 0 allocs/op
BenchmarkHistogramWrite1-4 1000000 1589 ns/op 896 B/op 37 allocs/op
BenchmarkHistogramWrite2-4 500000 2973 ns/op 1792 B/op 74 allocs/op
BenchmarkHistogramWrite4-4 300000 6979 ns/op 3584 B/op 148 allocs/op
BenchmarkHistogramWrite8-4 100000 10701 ns/op 7168 B/op 296 allocs/op
NEW:
BenchmarkHistogramWithLabelValues-4 10000000 191 ns/op 0 B/op 0 allocs/op
BenchmarkHistogramNoLabels-4 30000000 50.1 ns/op 0 B/op 0 allocs/op
BenchmarkHistogramObserve1-4 30000000 40.0 ns/op 0 B/op 0 allocs/op
BenchmarkHistogramObserve2-4 20000000 91.5 ns/op 0 B/op 0 allocs/op
BenchmarkHistogramObserve4-4 5000000 317 ns/op 0 B/op 0 allocs/op
BenchmarkHistogramObserve8-4 2000000 636 ns/op 0 B/op 0 allocs/op
BenchmarkHistogramWrite1-4 1000000 2072 ns/op 896 B/op 37 allocs/op
BenchmarkHistogramWrite2-4 300000 3729 ns/op 1792 B/op 74 allocs/op
BenchmarkHistogramWrite4-4 200000 7847 ns/op 3584 B/op 148 allocs/op
BenchmarkHistogramWrite8-4 100000 16975 ns/op 7168 B/op 296 allocs/op
Signed-off-by: beorn7 <beorn@soundcloud.com>
2018-09-12 15:03:44 +02:00
beorn7
1e08f788cf
Add test to expose #275
...
Signed-off-by: beorn7 <beorn@soundcloud.com>
2018-09-07 19:04:00 +02:00
Björn Rabenstein
7858729281
Merge pull request #456 from prometheus/beorn7/process_collector
...
Rework process collector
2018-09-07 12:25:42 +02:00
beorn7
773f502723
Rework process collector
...
This unifies both constructors in one with an options argument.
The options argument allows to switch on error reporting, as discussed
in #219 .
The change of the contructor signature is breaking, but only mildly
so. Plus, the process collector is rarely used explicitly. I used
Sourcegraph to search for public usages, with the following results:
- 2 occurrences of NewProcessCollectorPIDFn, once in @discordianfish's
glimpse, once in @fabxc's etcd_exporter (deprecated anyway). Both
are Prom veterans and will simply do the one line change if needed.
- 8 occurrences of NewProcessCollector, of which 7 are of the form
NewProcessCollector(os.Getpid(), "")
Thus, it's a very easy change, which I even hinted at in the doc
comment.
Signed-off-by: beorn7 <beorn@soundcloud.com>
2018-09-07 12:09:26 +02:00
Björn Rabenstein
3525612fea
Merge pull request #455 from prometheus/beorn7/desc
...
Add a DescribeByCollect helper
2018-09-05 14:55:05 +02:00
beorn7
6803bb4021
Add a DescribeByCollect helper
...
Signed-off-by: beorn7 <beorn@soundcloud.com>
2018-09-05 14:10:51 +02:00
Björn Rabenstein
2dbc3a58c2
Merge pull request #454 from prometheus/beorn7/testing
...
Add a single-value extractor and general package doc
2018-09-04 14:48:51 +02:00
beorn7
74a2f46d2c
Add package documentation
...
Signed-off-by: beorn7 <beorn@soundcloud.com>
2018-09-04 14:02:20 +02:00
beorn7
1301cf8fcd
Add helper function to extract a simple float value from a metric
...
Signed-off-by: beorn7 <beorn@soundcloud.com>
foo
2018-09-04 14:02:19 +02:00
Björn Rabenstein
d968d2292e
Merge pull request #453 from prometheus/beorn7/deprecation
...
Un-export prometheus.LabelPairSorter
2018-09-03 17:41:12 +02:00
beorn7
da330f4281
Un-export prometheus.LabelPairSorter
...
The only known external usage of it was in prometheus/pushgateway,
where it was removed by
https://github.com/prometheus/pushgateway/pull/200 .
Originally, the expectation was that users would implement the Metric
interface now and then. As we know now, neither it is happening, nor
would it make a lot of sense. (Users implement the Collector interface
instead.) By now, LabelPairSorter is essentially noise in the already
quite cluttered namespace in the prometheus package.
Signed-off-by: beorn7 <beorn@soundcloud.com>
2018-09-03 16:20:55 +02:00
Björn Rabenstein
a10423e9da
Merge pull request #445 from prometheus/beorn7/testing
...
Add testutil package
2018-09-03 00:31:34 +02:00
Björn Rabenstein
74cfc2394a
Merge pull request #452 from prometheus/beorn7/testing2
...
Create an internal package
2018-09-03 00:31:06 +02:00
beorn7
7be86f93c1
Create an internal package
...
This is for types we don't want to export but which are used in
different packages within client_golang.
Currently, that's only NormalizeMetricFamilies (used in the prometheus
package and in the testutil package). More to be added as needed.
Signed-off-by: beorn7 <beorn@soundcloud.com>
2018-09-03 00:18:11 +02:00
beorn7
5ba0993f6f
Improved interface
...
- Expected text format is now read from an io.Reader.
- Metrics are gathered from a Gatherer.
- Added a convenience wrapper to collect from a Collector.
Signed-off-by: beorn7 <beorn@soundcloud.com>
2018-09-02 21:07:38 +02:00
Björn Rabenstein
676eaf6b94
Merge pull request #451 from prometheus/beorn7/ci
...
Add test-short target and use it in CI
2018-08-28 22:48:07 +02:00
beorn7
db9651a839
Add test-short target and use it in CI
...
This is reinstating the old behavior. The longer tests are not only
long but also flaky. (The former is by design, the latter is a bug.)
Signed-off-by: beorn7 <beorn@soundcloud.com>
2018-08-28 15:13:08 +02:00
Björn Rabenstein
1216062c28
Merge pull request #448 from tariq1890/fix_docker_label
...
Using the recommended label syntax for maintainer in Dockerfile.
2018-08-28 15:00:45 +02:00
Björn Rabenstein
3653aff4d5
Merge pull request #450 from hotpxl/master
...
Typo in summary.go
2018-08-28 00:10:46 +02:00
Yutian Li
94f32c433e
typo
...
Signed-off-by: Yutian Li <hotpxless@gmail.com>
2018-08-27 12:01:30 -04:00
Tariq Ibrahim
6b1dd88302
Using the recommended label syntax for maintainer in Dockerfile.
...
Signed-off-by: Tariq Ibrahim <tariq.ibrahim@microsoft.com>
2018-08-27 08:28:47 -07:00
Guillaume Le Floch
4eb539fa85
Add prometheus common makefile ( #446 )
...
* Add prometheus common makefile
* Override test target to depends on get_dep
* Exclude staticcheck for go version 1.7.x and 1.8.x
Signed-off-by: glefloch <glfloch@gmail.com>
2018-08-24 12:10:16 +02:00
beorn7
154f28a316
Fix import grouping
...
Signed-off-by: beorn7 <beorn@soundcloud.com>
2018-08-23 00:05:02 +02:00
beorn7
e60f998e9b
Make license headers consistent
...
Signed-off-by: beorn7 <beorn@soundcloud.com>
2018-08-22 23:59:40 +02:00
beorn7
df0210c26c
Rename testutils to testutil and move below prometheus dir
...
`testutil` is more in line with stdlib naming conventions.
The package should be below `prometheus` as it only provides utils to
test exposition code, not to test HTTP client code.
Signed-off-by: beorn7 <beorn@soundcloud.com>
2018-08-22 23:57:08 +02:00
beorn7
fc4994c93c
Remove removeUnusedWhitespace
...
It wasn't needed, as is now proven by the tests
Signed-off-by: beorn7 <beorn@soundcloud.com>
2018-08-22 23:54:26 +02:00
beorn7
545fe31ad6
Merge branch 'testutils' of git://github.com/brancz/client_golang into beorn7/testing
2018-08-22 23:48:23 +02:00
Björn Rabenstein
ebce7d0078
Merge pull request #444 from glefloch/license
...
Add missing license headers
2018-08-22 19:59:59 +02:00
glefloch
61943b1eff
Remove Makefile
...
Signed-off-by: glefloch <glfloch@gmail.com>
2018-08-22 16:53:48 +02:00
glefloch
949c45bad2
Add missing header and fix review comments
...
Signed-off-by: glefloch <glfloch@gmail.com>
2018-08-22 15:32:42 +02:00
glefloch
0d7f5cb39b
Add check license in CI
...
Signed-off-by: glefloch <glfloch@gmail.com>
2018-08-22 14:35:50 +02:00
glefloch
cb71127117
Add missing license headers
...
Signed-off-by: glefloch <glfloch@gmail.com>
2018-08-22 13:53:56 +02:00
Björn Rabenstein
29e6500a95
Merge pull request #443 from prometheus/beorn7/timestamp
...
Add a wrapper to add a timestamp to a metric
2018-08-21 15:54:28 +02:00
beorn7
abaece07d1
Fix import grouping
...
Signed-off-by: beorn7 <beorn@soundcloud.com>
2018-08-18 16:02:33 +02:00
beorn7
5240f7e8f5
Add a wrapper to add a timestamp to a metric
...
Signed-off-by: beorn7 <beorn@soundcloud.com>
2018-08-18 15:56:08 +02:00
Frederic Branczyk
5b23715fac
Merge pull request #440 from simonpasquier/fix-vm-metric-name
...
Update the name of the maximum VM metric
2018-08-08 10:05:07 +02:00
Simon Pasquier
d6dbfbfc28
Update the name of the maximum VM metric
...
Signed-off-by: Simon Pasquier <spasquie@redhat.com>
2018-08-08 08:09:48 +02:00
Björn Rabenstein
420e2efa8f
Merge pull request #438 from simonpasquier/add-max-vsize-process-metric
...
Add process_maximum_virtual_memory_bytes metric
2018-08-07 21:38:51 +02:00
Björn Rabenstein
0d7f07276c
Merge pull request #439 from lidalei/master
...
go routine to goroutine
2018-08-07 21:35:41 +02:00
Dalei Li
927ca8e4f4
go routine to goroutine
...
Signed-off-by: Dalei Li <dalei.li@icloud.com>
2018-08-07 21:23:58 +02:00
Simon Pasquier
4ab15af0dc
Add process_maximum_virtual_memory_bytes metric
...
Signed-off-by: Simon Pasquier <spasquie@redhat.com>
2018-08-07 17:10:30 +02:00
Björn Rabenstein
bcbbc08eb2
Merge pull request #429 from prometheus/beorn7/summary
...
Add more checks around summaries and histograms
2018-07-13 22:10:52 +02:00
Björn Rabenstein
472be16acf
Merge pull request #427 from edaniels/patch-1
...
Make delegators wrapping responseWriterDelegator have value receivers
2018-07-13 22:05:57 +02:00
beorn7
4572e24546
Add suffix collision checks during gathering
...
So far, if a gauge was named `xxx_count`, and a summary or histogram
`xxx`, this would have led to a legal protobuf exposition but would
have created a name collision on `xxx_count` in the text format and
within the Prometheus server.
Signed-off-by: beorn7 <beorn@soundcloud.com>
2018-07-13 16:29:17 +02:00
Eric Daniels
2d0312e3dd
forgot some &s
...
Signed-off-by: Eric Daniels <eric@erdaniels.com>
2018-07-13 09:28:19 -04:00
beorn7
767a0218df
Add more label checksn during gathering
...
Including check for an invalid "quantile" label in summaries.
Also, improve error messages.
Signed-off-by: beorn7 <beorn@soundcloud.com>
2018-07-13 14:14:39 +02:00
beorn7
e064aa97f1
Check quantile label during SummaryVec construction
...
Also, document the existing behavior more clearly.
Signed-off-by: beorn7 <beorn@soundcloud.com>
2018-07-13 13:43:21 +02:00
Eric Daniels
c02aadb406
remove references to delegators
...
Signed-off-by: Eric Daniels <eric@erdaniels.com>
2018-07-12 17:56:44 -04:00
Eric Daniels
b3076e068e
Make delegators wrapping responseWriterDelegator have value receivers
...
Signed-off-by: Eric Daniels <eric@erdaniels.com>
2018-07-12 11:37:51 -04:00