Commit Graph

512 Commits

Author SHA1 Message Date
beorn7 0577ef6c57 Improve CollectAndCount
Now that we have also added CollectAndLint and GatherAndLint, I
thought we should bring CollectAndCount in line. So:

- Add GatherAndCount.
- Add filtering by metric name.
- Add tests.

Minor wart: CollectAndCount should now return `(int, error)`, but that
would be a breaking change as the current version just returns
`int`. I decided to let the new version panic when it should return an
error. An error is anyway very unlikely, so the biggest annoyance here
is really just the inconsistency.

Signed-off-by: beorn7 <beorn@grafana.com>
2020-05-14 00:17:45 +02:00
beorn7 389d3c3b9a Properly handle empty job and label values
An empty job name was always an error, but it was previously only
detected when pushing to the PGW and receiving an error. With this
commit, the error is detected before pushing.

An empty label value should have been OK but was encoded in a way that
couldn't be pushed to the
PGW. Cf. https://github.com/prometheus/pushgateway/issues/344 . This
commit changes the creation of the path in the URL so that it works
with empty label values.

Signed-off-by: beorn7 <beorn@grafana.com>
2020-05-13 23:35:31 +02:00
Michael Cristina be019d1f24 Fix typo in godoc help text
Signed-off-by: Michael Cristina <mcristina444@gmail.com>
2020-05-02 10:44:25 -05:00
beorn7 dc79bd6093 Improve various comments
Signed-off-by: beorn7 <beorn@grafana.com>
2020-04-25 15:59:53 +02:00
beorn7 39dbb24d13 Add helper functions for linting to testutil
Signed-off-by: beorn7 <beorn@grafana.com>
2020-04-24 23:44:59 +02:00
beorn7 6433bcf819 Add the capability to lint MetricFamilies directly
Also, change all the `dto.MetricFamily` arguments to pointers to be
more consistent with what we do in client_golang in general.

Signed-off-by: beorn7 <beorn@grafana.com>
2020-04-24 23:42:49 +02:00
Björn Rabenstein a3a59237d1
Merge pull request #739 from RainbowMango/pr_porting_promlint
Porting promlint from prometheus/prometheus
2020-04-24 16:06:34 +02:00
Björn Rabenstein a200f1930c
Merge pull request #738 from colega/colega/gauge-func-const-labels-godoc
GaugeFunc: ConstLabels godoc example
2020-04-24 14:29:25 +02:00
Oleg Zaytsev 38045061c3
GaugeFunc: ConstLabels godoc example
Document the example usage of ConstLabels to register several GaugeFuncs
on the same metric name. Also reference it from the NewCounterFunc
documentation as it's similar.

Ref: https://github.com/prometheus/client_golang/pull/736

Signed-off-by: Oleg Zaytsev <mail@olegzaytsev.com>
2020-04-24 09:33:20 +02:00
RainbowMango 50cda505d1 fix static check warnings by Goland.
Signed-off-by: RainbowMango <renhongcai@huawei.com>
2020-04-24 10:15:27 +08:00
RainbowMango af6ade7230 Fix unit test failing with Go1.14+
Signed-off-by: RainbowMango <renhongcai@huawei.com>
2020-04-23 15:14:34 +08:00
RainbowMango 3c5e60edc1 Porting promlint from prometheus/prometheus.
Signed-off-by: RainbowMango <renhongcai@huawei.com>
2020-04-23 14:09:29 +08:00
cobolbaby c6babafd27 feat: Change processMemoryCounters struct uint declaration to uintptr
Signed-off-by: cobolbaby <cobolbaby@qq.com>
2020-04-13 10:44:09 +08:00
cobolbaby 0bb7f92c09 fix: process_resident_memory_bytes detected is incorrect in Win7 32bit
Ref: https://github.com/prometheus/client_golang/issues/728
Signed-off-by: Cobolbaby <Zhang.Xing-Long@inventec.com>
2020-04-10 16:38:16 +08:00
beorn7 586178b4ab Fix promhttp error handling
Essentially, just don't try to set a status code and send any error
message in the body once metrics gathering has succeeded. At that
point, the most likely reason for errors is anyway that the client has
disconnected, in which sending an error is moot. The other possible
reason for an error is a problem during metrics encoding. This is
unlikely to happen (it's a coding error here in client_golang in any
case), and if it is happening, the odds are we have already sent
something to the ResponseWriter, which means we cannot set a status
code anymore. The doc comment for HTTPErrorOnError now describes these
circumstances explicitly and recommends to set a logger to report that
kind of error.

This should fix the reason for the infamous `superfluous
response.WriteHeader call` message.

Signed-off-by: beorn7 <beorn@grafana.com>
2020-03-13 00:10:32 +01:00
Björn Rabenstein b25ce2693a
Merge pull request #713 from prometheus/beorn7/promauto
Add a "factory" to make promauto work for custom registries
2020-02-14 16:41:32 +01:00
beorn7 1c2884b807 Add NewUntypedFunc to promauto
This constructor was simply forgotten.

Signed-off-by: beorn7 <beorn@grafana.com>
2020-02-13 22:08:18 +01:00
beorn7 92c1ac77e7 Add a "factory" to make promauto work for custom registries
Also, update the package documentation. The concerns about the global
registry aren't really valid anymore because promauto now also works
with custom registries.

The musings about the http.DefaultMux are more a digression and
shouldn't be in a doc comment.

Signed-off-by: beorn7 <beorn@grafana.com>
2020-02-13 22:03:30 +01:00
beorn7 87f9434351 Remove obsolete references to `Untyped` from doc comments
Signed-off-by: beorn7 <beorn@grafana.com>
2020-02-13 22:03:05 +01:00
beorn7 aa6eadda9c Explicitly forward metricVec methods Collect, Describe, Reset
Interestingly, methods implicitly forwarded from embedded types are
detected by GoDoc if they are just one level deep. Embedded types in
the embedded type are not recognized. This commit therefore adds
explicit forwarding methods for Collect, Describe, and Reset.

Signed-off-by: beorn7 <beorn@grafana.com>
2020-02-13 20:22:37 +01:00
Shreyas Srivatsan bc9e50c39f Initialize now fn for counters
Signed-off-by: Shreyas Srivatsan <shreyas@chronosphere.io>
2020-02-05 22:25:47 -08:00
beorn7 f34b09877c Pull out ...WithExemplar methods into separate interfaces
This is, sadly, the only way to avoid a breaking change. The cost is
that anyone using exemplars has to perform a type assertion. This is,
however, a common pattern where interfaces turn out to need additional
methods in a stable library or only some implementations can provide
the additional methods (AKA "interface upgrade").

Needless to say that in v2 of this library, we'll do things in a more
straight forward way.

Signed-off-by: beorn7 <beorn@grafana.com>
2020-01-27 15:41:13 +01:00
beorn7 c32ffd121f Add tests for examplars
Signed-off-by: beorn7 <beorn@grafana.com>
2020-01-24 17:12:36 +01:00
beorn7 57d41259e1 Add exemplars to counter and histogram
Signed-off-by: beorn7 <beorn@grafana.com>
2020-01-24 17:12:08 +01:00
Bartlomiej Plotka 9e9cc003f8 Added testutil.CollectAndCount
Signed-off-by: Bartlomiej Plotka <bwplotka@gmail.com>
2020-01-09 11:20:19 +00:00
beorn7 2be4bb406e Improve doc string for `go_gc_duration_seconds`
Fixes #618.

Signed-off-by: beorn7 <beorn@grafana.com>
2020-01-06 13:38:35 +01:00
beorn7 de74638693 Improve doc comment for NewGaugeFunc
- Simplify confusing wording about concurrency safety.
- Add link to example for info metric.

Signed-off-by: beorn7 <beorn@grafana.com>
2019-12-09 18:20:27 +01:00
Dean Coakley 508fc33903
Fix link to writing exporters guide
Signed-off-by: Dean Coakley <dean.s.coakley@gmail.com>
2019-11-28 15:01:46 +00:00
kamaev 06342cf74f
fix tests
Signed-off-by: kamaev <timurkamaev@protonmail.com>
2019-10-23 00:15:54 +05:00
kamaev c333d152b1
add graphite tags
Signed-off-by: kamaev <timurkamaev@protonmail.com>
2019-10-23 00:15:41 +05:00
Jeff Widman 0dc0c2165f Remove old reference to basicMetricVec
Contrary to the code comment, I see no `basicMetricVec` implementation.
Grep'ing this project shows this is the only reference. So I suspect
it's an outdated comment and can be removed to minimize confusion.

I'm unclear whether other parts of that comment are also incorrect and
need updating.

Signed-off-by: Jeff Widman <jeff@jeffwidman.com>
2019-10-18 10:05:25 -07:00
Leo Antunes 4be0ab45ec ensure same collectorID calculated on reg and unreg
Signed-off-by: Leo Antunes <leo@costela.net>
2019-10-17 14:16:32 +02:00
beorn7 679da921f7 Simplify code
`gofmt -s` taught me that this is possible.

Signed-off-by: beorn7 <beorn@grafana.com>
2019-10-16 12:18:16 +02:00
beorn7 19af62dcc8 Use a cleaner initialization of `separatorByteSlice`
The `const separatorByte` wasn't used anymore actually. In `vec.go`,
we were using `model.SeparatorByte`, which is better anyway. So remove
the unused constant and initialize `separatorByteSlice` with
`model.SeparatorByte`, too.

Signed-off-by: beorn7 <beorn@grafana.com>
2019-10-15 19:52:31 +02:00
Björn Rabenstein c13325c862
Merge pull request #655 from prometheus/beorn7/test
Unflake TestGoCollectorGoroutines
2019-10-15 13:19:50 +02:00
Björn Rabenstein 8b3e008442
Merge pull request #657 from prometheus/beorn7/registry
Make hash collisions in the registry much less likely
2019-10-15 11:43:02 +02:00
beorn7 ee1078a03c Move registry hashing to xxhash
This is a much stronger hash function than fnv64a and comparably fast
(with super-fast assembly implementation for amd64).

Performance is not critical here anyway.

The old fnv64a is kept for vectors, where collision detection is in
place and the weakness of the hashing doesn't matter that much. I
implemented a vector version with xxhash and found that xxhash is
slower in all cases except very very high cardinality (where it is
only slightly faster). Also, ``xxhash.New`` comes with an allocation
of 80 bytes. Thus, to keep vectors alloc-free, we needed to add a
`sync.Pool`, which would have an additional performance overhead.

Signed-off-by: beorn7 <beorn@grafana.com>
2019-10-14 21:18:38 +02:00
beorn7 c2e3855f3b Minimal “fix” for hash collisions
This makes the collisions a bit less likely by XOR'ing descIDs rather
than adding them up for the collectorID.

Signed-off-by: beorn7 <beorn@grafana.com>
2019-10-14 20:14:43 +02:00
beorn7 bf9ff715fe Expose bug #633
Signed-off-by: beorn7 <beorn@grafana.com>
2019-10-14 20:02:58 +02:00
beorn7 6fa429cf42 Unflake TestGoCollectorGoroutines
This is not a great solution, but it's also hard to test for this
moving target.

Signed-off-by: beorn7 <beorn@grafana.com>
2019-10-14 19:44:28 +02:00
beorn7 bd362a9ced Use HTTP status code constants rather than numerical literals
Signed-off-by: beorn7 <beorn@grafana.com>
2019-10-14 19:27:09 +02:00
beorn7 f24de70161 Update push test to use status code 200
Signed-off-by: beorn7 <beorn@grafana.com>
2019-10-14 19:24:20 +02:00
Xin Zhang 7c6a9d7568 Fix check status code
Signed-off-by: Xin Zhang <ahjdzx1990@gmail.com>
2019-10-12 16:08:00 +08:00
beorn7 ad58180fde Add WriteHeader call to Flush
Flush is another of the methods that will call WriteHeader if it
hasn't happened yet. Since we want to call observeWriteHeader (if
set), we need to do the WriteHeader call already here, similar to what
we have done in Write and ReadFrom.

This commit also adds comments explaining the above to not tempt
developers to remove the WriteHeader call.

Signed-off-by: beorn7 <beorn@grafana.com>
2019-08-19 18:19:23 +02:00
Andrey Yurchenkov b0bcec8f2e
Fix typo in documentation
Signed-off-by: Andrey Yurchenkov <painhardcore@gmail.com>
2019-08-13 13:43:39 +03:00
beorn7 4b95c4ab42 Support new base64 encoding for pushing to the Pushgateway
This should only be released after PGW 0.9 is released.

Signed-off-by: beorn7 <beorn@grafana.com>
2019-07-22 20:31:37 +02:00
beorn7 48cd700822 Use method constants from the http package
Signed-off-by: beorn7 <beorn@grafana.com>
2019-06-28 15:23:00 +02:00
beorn7 9a1440d469 Add Delete method
Fixes #611.

Signed-off-by: beorn7 <beorn@grafana.com>
2019-06-28 15:12:09 +02:00
beorn7 2f3a0f8f2e Make the AlreadyRegisteredError useful for wrapped registries
Signed-off-by: beorn7 <beorn@grafana.com>
2019-06-14 17:55:35 +02:00
beorn7 f61dbeaded Update doc comment of NewProcessCollector
- Now also works on MS Windows.
- The hints for updating from older versions is obsolete by now.

Signed-off-by: beorn7 <beorn@grafana.com>
2019-06-14 12:33:52 +02:00
Calle Pettersson c5f4190338 Implement process collector for Windows (#596)
* Implement process collector for Windows

Signed-off-by: Calle Pettersson <calle@cape.nu>
2019-06-14 12:26:55 +02:00
beorn7 e7f6132a76 Remove work duplication in doc comment
Signed-off-by: beorn7 <beorn@grafana.com>
2019-06-12 01:46:17 +02:00
beorn7 761a2ff07c Remove all deprecated features
This is in preparation of the upcoming v1 release.

Signed-off-by: beorn7 <beorn@grafana.com>
2019-06-11 16:28:47 +02:00
beorn7 8576729b6f Add a simple buildInfoCollector
Signed-off-by: beorn7 <beorn@grafana.com>
2019-06-06 22:24:23 +02:00
beorn7 4d8144c11a Add test for the new promhttp_metric_handler_errors_total metric
Signed-off-by: beorn7 <beorn@grafana.com>
2019-06-06 16:56:58 +02:00
beorn7 3fa9fca2cb Add an error counter for internal errors in the HTTP handler
The doc comments explain the rationale in a quite detailed way.

Fixes #543 and #542

Signed-off-by: beorn7 <beorn@grafana.com>
2019-06-05 20:07:49 +02:00
beorn7 3d1d93eb51 Remove use of deprecated procfs functions
Signed-off-by: beorn7 <beorn@grafana.com>
2019-06-04 19:26:20 +02:00
Björn Rabenstein 388f9869ac
Merge pull request #588 from prometheus/beorn7/test
Attempt to fix flakiness of TestGoCollectorMemStats
2019-05-26 23:20:33 +02:00
beorn7 c818d96e15 Unflake TestGoCollectorGC
It is perfectly possible that a normal GC happens just before the
forced one. Thus seeing 2 GCs is fine.

Whenever this test failed, it was because two GCs were seen.

Signed-off-by: beorn7 <bjoern@rabenste.in>
2019-05-26 14:11:51 +02:00
beorn7 fe90eea9bb Attempt to fix flakiness of TestGoCollectorMemStats
This is really lame as it essentially just uses longer times to
wait. The test is still timing-dependent and thus could still
theoretically fail with unlucky scheduling. However, we are testing
something that _is_ about timing. Turning this all into something not
timing-dependent would be first quite involved and second might defeat
the purpose of testing code that is inherently about timing.

Let's see how this works out in practice.

Signed-off-by: beorn7 <bjoern@rabenste.in>
2019-05-26 13:25:59 +02:00
beorn7 b5f69192ee Purge remaining references to v0.10 from doc comments
Signed-off-by: beorn7 <bjoern@rabenste.in>
2019-05-16 23:35:36 +02:00
beorn7 bc54582c5e Make use of pre-existing context in InstrumentRoundTripperTrace
Fixes #580

Signed-off-by: beorn7 <bjoern@rabenste.in>
2019-05-16 17:52:19 +02:00
beorn7 6c520f6aca Add test to expose #580
Tests are heavily inspired by @shturec, see #584.

Signed-off-by: beorn7 <bjoern@rabenste.in>
2019-05-16 17:52:19 +02:00
Björn Rabenstein 775f94f6fc
Merge pull request #581 from prometheus/beorn7/test
Fix race in TestGoCollectorMemStats
2019-05-16 15:31:37 +02:00
beorn7 e91cd81632 Remove outdated use-case description from doc comment
We stopped advertising binary-wide setting of a label quite a while
ago. This doc comment was missed in the cleanup.

Signed-off-by: beorn7 <bjoern@rabenste.in>
2019-05-16 11:23:48 +02:00
beorn7 709dc4b1de Fix race in TestGoCollectorMemStats
Related to #573 (but only partially fixes it).

Signed-off-by: beorn7 <bjoern@rabenste.in>
2019-05-16 10:37:37 +02:00
Camilo Viecco facfcc21f8 fix regression issue 574
Signed-off-by: Camilo Viecco <camilo_viecco1@symantec.com>
2019-05-14 11:44:55 -07:00
beorn7 886e2ee0c0 Clarify deprecation of `DefObjectives`
Previously, the whole `Objectives` field was marked as deprecated by
linters.

Signed-off-by: beorn7 <bjoern@rabenste.in>
2019-05-08 13:38:43 +02:00
Björn Rabenstein 2d3b0fe0e0
Merge pull request #568 from prometheus/beorn7/go-collector
Return previous memstats if Go collector needs longer than 1s
2019-05-07 00:10:32 +02:00
Bjoern Rabenstein 7cf0955421 Handle long ReadMemStats duration in Go collector
tl;dr: Return previous memstats if reading new ones takes longer than
1s.

See the doc comment of NewGoCollector for details.

Signed-off-by: beorn7 <bjoern@rabenste.in>
2019-05-06 23:28:31 +02:00
beorn7 547c945a62 Replace fmt.Sprintf by simple concatenation
In this simple case, it's the fastest and easiest.

Signed-off-by: beorn7 <bjoern@rabenste.in>
2019-05-06 23:28:31 +02:00
beorn7 016273b1f9 Fix and tweak Go collector tests
Signed-off-by: beorn7 <bjoern@rabenste.in>
2019-05-06 23:28:31 +02:00
Björn Rabenstein f1d50bcc55
Merge pull request #559 from nghialt/master
Add HTTPClient interface to Pusher struct
2019-05-06 01:31:30 +02:00
NghiaLT 6ea6f07918 Replace HTTPClient with HTTPDoer; Update document accordingly
Signed-off-by: NghiaLT <nghialt.11@gmail.com>
2019-05-06 04:28:14 +07:00
Björn Rabenstein 906d2976cb
Merge pull request #567 from prometheus/beorn7/counter
Make TestCounterAddLarge more robust
2019-05-04 18:08:04 +02:00
Bjoern Rabenstein bf1f4e4a24 Make TestCounterAddLarge more robust
The previous `float64(math.MaxUint64 + 1)` is too close to
`float64(math.MaxUint64)` to actually overflow as indended.

The counter code is actually converting forward and backward and
compare the original and twice-converted value. On most platform, this
will create a deviation and thus trigger the expected behavior. By
sheer "luck", one might end up with the same value and thus still use
the uint64 representation. Which is OK within the precision we can
expect. But it breaks the test. With this change, the next
representable floating point value greater than the floating point
value used to represent math.MaxUint64 is used.

Signed-off-by: Bjoern Rabenstein <bjoern@rabenste.in>
2019-05-03 22:25:32 +02:00
Bjoern Rabenstein 57f7bd35fd Remove remaining traces of pre-go-1.8 handling
Signed-off-by: Bjoern Rabenstein <bjoern@rabenste.in>
2019-05-03 21:30:30 +02:00
KevinBetterQ a325fb7566 fix: fix a typo
Signed-off-by: KevinBetterQ <1093850932@qq.com>
2019-05-01 17:50:23 +08:00
Bjoern Rabenstein 1173d73405 Increase minimum required Go version to 1.9
This allows us to simplify a bunch of code while still supporting the
last four Go minor versions.

We have also run into minor annoyances a couple of times by now to
keep supporting 1.7 and 1.8.

It's time to pull the plug!

Signed-off-by: Bjoern Rabenstein <bjoern@rabenste.in>
2019-04-28 23:28:57 +02:00
NghiaLT c9d77912ac Add HTTPClient interface to Pusher struct
Signed-off-by: NghiaLT <nghialt.11@gmail.com>
2019-04-26 16:53:21 +07:00
Simon Pasquier 6894bb3c7c Add .golangci.yml
Signed-off-by: Simon Pasquier <spasquie@redhat.com>
2019-04-25 10:38:07 +02:00
Simon Pasquier 15da21f1e4 *: replace golang.org/x/net/context by context
The context package is available since Go 1.7 which is the minimal version
supported by client_golang.

Signed-off-by: Simon Pasquier <spasquie@redhat.com>
2019-04-09 15:10:51 +02:00
Sergiusz Urbaniak 60728f445d prometheus/promhttp: actually observe values in trace in example
This is similar to
https://github.com/prometheus/client_golang/pull/535 fixing ExampleInstrumentRoundTripperDuration.

Signed-off-by: Sergiusz Urbaniak <sergiusz.urbaniak@gmail.com>
2019-03-06 13:59:53 +01:00
Frank Spitulski 10e34c668f fix(push): incorporate changes from review
Signed-off-by: Frank Spitulski <fspituls@ucsd.edu>
2019-02-24 15:15:35 -08:00
Frank Spitulski 7b127b3fe5 feat(push): add format builder option
Allow users to specify which format the pusher should push in.

Signed-off-by: Frank Spitulski <fspituls@ucsd.edu>
2019-02-24 12:51:45 -08:00
beorn7 4c99dd6630 Port histogram improvements into noObjectivesSummary
Signed-off-by: beorn7 <beorn@soundcloud.com>
2019-02-11 19:10:17 +01:00
beorn7 295f7e4861 Fix some comment and naming nits as leftover from #536
Signed-off-by: beorn7 <beorn@soundcloud.com>
2019-02-11 18:52:52 +01:00
Pascal S. de Kloe 19ff277483 Save memory on histograms: slightly faster with less code (#536)
Use the highest bit for buffer switch tracking in histograms

Signed-off-by: Pascal S. de Kloe <pascal@quies.net>
2019-02-11 18:29:02 +01:00
kklipsch a11607d7ae fix client trace examples to actually capture metrics
Signed-off-by: kklipsch <kklipsch@example.com>
2019-02-04 20:30:19 +00:00
beorn7 8785922956 Revert "Fix tests to adhere to the recent change in prometheus/common"
This reverts commit 2c9811f88e.

This is necessary because the changes in prometheus/common got reverted.

Signed-off-by: beorn7 <beorn@soundcloud.com>
2019-01-27 23:18:44 +01:00
Matt Layher da7d5640a2 prometheus: reword comment to avoid cursing
Signed-off-by: Matt Layher <mdlayher@gmail.com>
2019-01-16 17:03:06 -05:00
beorn7 b3d6096432 Improve testutil error messages
This also satisfy newer staticcheck versions.

Signed-off-by: beorn7 <beorn@soundcloud.com>
2019-01-06 00:22:03 +01:00
beorn7 91b385db44 Fix staticcheck errors in push_test.go
Signed-off-by: beorn7 <beorn@soundcloud.com>
2019-01-05 22:11:07 +01:00
Björn Rabenstein 2945395678
Merge pull request #525 from RomanKrasavtsev/patch-1
fix typo
2019-01-05 21:35:34 +01:00
Björn Rabenstein cf7da0f496
Merge pull request #521 from prometheus/beorn7/summary
Lock-free summaries without objectives
2019-01-05 21:23:43 +01:00
Roman Krasavtsev c51ed6941c fix typo
Signed-off-by: Roman Krasavtsev <mr.krasavtsev@gmail.com>
2019-01-04 21:14:10 +01:00
JoeWrightss fb3d5cb2ad Fix some spelling errors (#523)
* Fix some spelling errors

Signed-off-by: JoeWrightss <zhoulin.xie@daocloud.io>
2018-12-30 21:31:21 +01:00
gkze ee4e5e071e Fix typo again
Signed-off-by: gkze <george.kontridze@gmail.com>
2018-12-26 17:39:47 -08:00
beorn7 226b83ac2e Provide lock-free implementation for Summary without objectives
Signed-off-by: beorn7 <beorn@soundcloud.com>
2018-12-24 11:23:13 +01:00
beorn7 a006a7550a Remove unused constants and fields
Signed-off-by: beorn7 <beorn@soundcloud.com>
2018-12-24 11:22:57 +01:00