Owen Williams
59ea1b115b
helpful debug
2024-01-09 13:20:21 -05:00
Tiago Silva
59c00e3e9c
Fix data-race in metric without code and method but with `WithLabelFromCtx` ( #1318 )
...
This commit fixes a data race that exists when the metric used in any
`promhttp` middleware doesn't collect the `code` and `method` but uses
`WithLabelFromCtx` to collect values from context.
The problem happens because when no `code` and `method` tags are
collected, the `labels` function returns a pre-initialized map
`emptyLabels` for every request.
When one or multipe `WithLabelFromCtx` options are configured, the
returned map from the `labels` function call is used to collect the
metrics from context which creates a multi-write data race.
Signed-off-by: Tiago Silva <tiago.silva@goteleport.com>
2023-08-01 17:11:17 +01:00
Quentin D
644c80d136
Do not allocate memory when there's no constraints ( #1296 )
...
Signed-off-by: Quentin Devos <4972091+Okhoshi@users.noreply.github.com>
2023-06-27 12:21:36 +01:00
Han Kang
b8cb86a865
add process start time header to client_golang prometheus ( #1278 )
...
* add process start time header to client_golang prometheus
Signed-off-by: Han Kang <hankang@google.com>
* Apply suggestions from code review
Co-authored-by: Bartlomiej Plotka <bwplotka@gmail.com>
Signed-off-by: Han Kang <hankang@google.com>
* fix up changes due to incorporation of feedback
* fix lint issues
---------
Signed-off-by: Han Kang <hankang@google.com>
Co-authored-by: Bartlomiej Plotka <bwplotka@gmail.com>
2023-05-26 12:58:36 +01:00
bwplotka
b8fdd239b2
Added clarification.
...
Signed-off-by: bwplotka <bwplotka@gmail.com>
2023-05-03 09:41:34 +01:00
bwplotka
2ea234eef0
Revert "Remove unnecessary check if label is nil in observeWithExemplar ( #1235 )"
...
This reverts commit 3ce88f33d1
.
Signed-off-by: bwplotka <bwplotka@gmail.com>
2023-05-03 09:41:26 +01:00
dimonl
3ce88f33d1
Remove unnecessary check if label is nil in observeWithExemplar ( #1235 )
...
* Remove unnecessary check if label is nil in observeWithExemplar instrumentation
Signed-off-by: dlituyev <dlituyev@slb.com>
* Remove unnecessary check if label is nil in observeWithExemplar instrumentation
Signed-off-by: dlituyev <dlituyev@slb.com>
---------
Signed-off-by: dlituyev <dlituyev@slb.com>
Co-authored-by: dlituyev <dlituyev@slb.com>
2023-03-20 10:23:36 +01:00
Quentin D
fcdc3ec54a
Add possibility to dynamically get label values for http instrumentation ( #1066 )
...
Signed-off-by: Quentin Devos <4972091+Okhoshi@users.noreply.github.com>
Signed-off-by: Quentin Devos <4972091+Okhoshi@users.noreply.github.com>
2023-01-19 10:19:08 +00:00
Dave Henderson
4c41dfbcd5
Clarify exemplar(Add|Observe) by renaming to (add|observe)WithExemplar ( #1122 )
...
* Clarify exemplarAdd by renaming to addWithExemplar
Signed-off-by: Dave Henderson <dhenderson@gmail.com>
* Documenting addWithExemplar
Signed-off-by: Dave Henderson <dhenderson@gmail.com>
* Also rename exemplarObserve to follow the same pattern
Signed-off-by: Dave Henderson <dhenderson@gmail.com>
Signed-off-by: Dave Henderson <dhenderson@gmail.com>
2022-08-22 17:31:08 +02:00
Dave Henderson
f73e3cc0e2
Fix double-counting bug in promhttp.InstrumentRoundTripperCounter ( #1118 )
...
Signed-off-by: Dave Henderson <dhenderson@gmail.com>
Signed-off-by: Dave Henderson <dhenderson@gmail.com>
2022-08-22 08:28:46 +03:00
Christoph Mewes
618194de6a
fix assorted oddities found by golangci-lint ( #1040 )
...
* fix assorted oddities found by golangci-lint
Signed-off-by: Christoph Mewes <christoph@kubermatic.com>
* permanently enable the linters
Signed-off-by: Christoph Mewes <christoph@kubermatic.com>
* post-rebase blues
Signed-off-by: Christoph Mewes <christoph@kubermatic.com>
2022-08-03 06:30:51 +02:00
Bartlomiej Plotka
c7488be2e4
Added exemplar support to http middleware. ( #1055 )
...
* Added exemplar support to http middlewares.
Signed-off-by: Bartlomiej Plotka <bwplotka@gmail.com>
* Small fix.
Signed-off-by: Bartlomiej Plotka <bwplotka@gmail.com>
* Fixed test.
Signed-off-by: Bartlomiej Plotka <bwplotka@gmail.com>
* Added tests and options for RT.
Signed-off-by: bwplotka <bwplotka@gmail.com>
* goimports.
Signed-off-by: bwplotka <bwplotka@gmail.com>
2022-08-02 19:33:08 +02:00
Soroosh Azary Marhabi
2cfd1eb960
Enable same linters as the Prometheus repo itself ( #1056 )
...
* Add gofumpt to github workflow & fix all files for it
Signed-off-by: sazary <soroosh@azary.ir>
* Add goimports to golangci & fix it's issues
Signed-off-by: sazary <soroosh@azary.ir>
* Add revive to golangci & fix it's issues
Signed-off-by: sazary <soroosh@azary.ir>
* Add errcheck & misspell to golangci and fix their issues
Signed-off-by: sazary <soroosh@azary.ir>
* Add govet & gosimple to golangci and fix their issues
Signed-off-by: sazary <soroosh@azary.ir>
* Enable all default linters of golangci
Signed-off-by: sazary <soroosh@azary.ir>
2022-06-17 09:04:06 +02:00
Bartlomiej Plotka
1f81b3e913
Added Transactional Gatherer allowed cached solutions ( #989 )
...
* Added cached collector.
Signed-off-by: Bartlomiej Plotka <bwplotka@gmail.com>
update.
Signed-off-by: Bartlomiej Plotka <bwplotka@gmail.com>
Attempt 2
Signed-off-by: Bartlomiej Plotka <bwplotka@gmail.com>
Added blocking registry, with raw collector and transactional handler.
Signed-off-by: Bartlomiej Plotka <bwplotka@gmail.com>
Added fast path to normal (empty) registry to save 8 allocs and 3K5B per Gather.
Signed-off-by: Bartlomiej Plotka <bwplotka@gmail.com>
Simplified API, added tests.
Signed-off-by: Bartlomiej Plotka <bwplotka@gmail.com>
Fix.
Signed-off-by: Bartlomiej Plotka <bwplotka@gmail.com>
Simplified implementation.
Signed-off-by: Bartlomiej Plotka <bwplotka@gmail.com>
Added benchmark.
Signed-off-by: Bartlomiej Plotka <bwplotka@gmail.com>
Optimized.
Signed-off-by: Bartlomiej Plotka <bwplotka@gmail.com>
* Optimization attempt.
Signed-off-by: Bartlomiej Plotka <bwplotka@gmail.com>
* Revert "Optimization attempt."
This reverts commit 2fcaf51be9
.
Optimization was not worth it:
benchstat v1.txt v2.txt
name old time/op new time/op delta
CachedTGatherer_Update/Update_of_one_element_without_reset-12 2.64µs ± 0% 4.05µs ± 0% ~ (p=1.000 n=1+1)
CachedTGatherer_Update/Update_of_all_elements_with_reset-12 701ms ± 0% 358ms ± 0% ~ (p=1.000 n=1+1)
CachedTGatherer_Update/Gather-12 535µs ± 0% 703934µs ± 0% ~ (p=1.000 n=1+1)
name old alloc/op new alloc/op delta
CachedTGatherer_Update/Update_of_one_element_without_reset-12 208B ± 0% 208B ± 0% ~ (all equal)
CachedTGatherer_Update/Update_of_all_elements_with_reset-12 40.2MB ± 0% 41.1MB ± 0% ~ (p=1.000 n=1+1)
CachedTGatherer_Update/Gather-12 48.6kB ± 0% 84.3kB ± 0% ~ (p=1.000 n=1+1)
name old allocs/op new allocs/op delta
CachedTGatherer_Update/Update_of_one_element_without_reset-12 3.00 ± 0% 3.00 ± 0% ~ (all equal)
CachedTGatherer_Update/Update_of_all_elements_with_reset-12 6.00 ± 0% 4003.00 ± 0% ~ (p=1.000 n=1+1)
CachedTGatherer_Update/Gather-12 1.00k ± 0% 2.01k ± 0% ~ (p=1.000 n=1+1)
* nit.
Signed-off-by: Bartlomiej Plotka <bwplotka@gmail.com>
* Another optimization attempt.
Signed-off-by: Bartlomiej Plotka <bwplotka@gmail.com>
* rename and further optimization.
Signed-off-by: Bartlomiej Plotka <bwplotka@gmail.com>
* Hopefully final optimization.
benchstat -delta-test=none v6.txt v9.txt
name old time/op new time/op delta
CachedTGatherer_Update/Update_of_one_element_without_reset-12 13.1ms ± 0% 0.0ms ± 0% -99.81%
CachedTGatherer_Update/Update_of_all_elements_with_reset-12 309ms ± 0% 282ms ± 0% -8.77%
CachedTGatherer_Update/Gather-12 422ms ± 0% 0ms ± 0% -99.95%
name old alloc/op new alloc/op delta
CachedTGatherer_Update/Update_of_one_element_without_reset-12 208B ± 0% 208B ± 0% 0.00%
CachedTGatherer_Update/Update_of_all_elements_with_reset-12 2.47kB ± 0% 1.67kB ± 0% -32.56%
CachedTGatherer_Update/Gather-12 52.8kB ± 0% 24.6kB ± 0% -53.34%
name old allocs/op new allocs/op delta
CachedTGatherer_Update/Update_of_one_element_without_reset-12 3.00 ± 0% 3.00 ± 0% 0.00%
CachedTGatherer_Update/Update_of_all_elements_with_reset-12 0.00 0.00 0.00%
CachedTGatherer_Update/Gather-12 1.00k ± 0% 0.00k ± 0% -99.60%
Signed-off-by: Bartlomiej Plotka <bwplotka@gmail.com>
* Removed obsolete comment
Signed-off-by: Bartlomiej Plotka <bwplotka@gmail.com>
* Fixed tests.
Signed-off-by: Bartlomiej Plotka <bwplotka@gmail.com>
* Removed cache.
Signed-off-by: Bartlomiej Plotka <bwplotka@gmail.com>
* Fixed tests.
Signed-off-by: Bartlomiej Plotka <bwplotka@gmail.com>
* Re-add cache.
Signed-off-by: Bartlomiej Plotka <bwplotka@gmail.com>
* Removed cache.
Signed-off-by: Bartlomiej Plotka <bwplotka@gmail.com>
2022-02-23 11:22:52 +00:00
Kemal Akkoyun
5bd9ee52dc
go.*: Update dependencies ( #965 )
...
* Update dependencies
Signed-off-by: Kemal Akkoyun <kakkoyun@gmail.com>
* Update deprecated APIs
Signed-off-by: Kemal Akkoyun <kakkoyun@gmail.com>
* Add missing dependency explicitly
Signed-off-by: Kemal Akkoyun <kakkoyun@gmail.com>
2022-01-18 20:32:44 +01:00
Kemal Akkoyun
9075cdf616
promhttp: Check validity of method and code label values ( #962 )
...
* Check validity of method and code label values
Signed-off-by: Kemal Akkoyun <kakkoyun@gmail.com>
* Use more flexibly functional option pattern for configuration
Signed-off-by: Kemal Akkoyun <kakkoyun@gmail.com>
* Update documentation
Signed-off-by: Kemal Akkoyun <kakkoyun@gmail.com>
* Simplify
Signed-off-by: Kemal Akkoyun <kakkoyun@gmail.com>
* Fix inconsistent method naming
Signed-off-by: Kemal Akkoyun <kakkoyun@gmail.com>
2022-01-18 10:19:28 +01:00
beorn7
e92283d644
Fix linter ignores
...
Signed-off-by: beorn7 <beorn@grafana.com>
2021-03-16 17:19:03 +01:00
beorn7
98eb6cbf7c
promhttp: Correctly detect invalid metric and label names
...
Without this fix, the `InstrumentHandler...` middlewares get locked in
an endless loop in case of an invalid Collector, eating all the memory.
Signed-off-by: beorn7 <beorn@grafana.com>
2020-12-09 17:58:53 +01:00
beorn7
34ca120377
Be more explicit about the multi-line properties of MultiError
...
Signed-off-by: beorn7 <beorn@grafana.com>
2020-12-02 19:53:38 +01:00
Michael Vetter
cf6dc82780
Correct spelling: possibilites -> possibilities
...
Signed-off-by: Michael Vetter <jubalh@iodoru.org>
2020-12-01 21:20:26 +01: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
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
beorn7
57d41259e1
Add exemplars to counter and histogram
...
Signed-off-by: beorn7 <beorn@grafana.com>
2020-01-24 17:12:08 +01: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
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
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
Camilo Viecco
facfcc21f8
fix regression issue 574
...
Signed-off-by: Camilo Viecco <camilo_viecco1@symantec.com>
2019-05-14 11:44:55 -07: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
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
Simon Pasquier
6894bb3c7c
Add .golangci.yml
...
Signed-off-by: Simon Pasquier <spasquie@redhat.com>
2019-04-25 10:38:07 +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
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
beorn7
a006a7550a
Remove unused constants and fields
...
Signed-off-by: beorn7 <beorn@soundcloud.com>
2018-12-24 11:22:57 +01:00
beorn7
2c9811f88e
Fix tests to adhere to the recent change in prometheus/common
...
Signed-off-by: beorn7 <beorn@soundcloud.com>
2018-12-18 17:20:25 +01:00
beorn7
62361fc0fb
Use streaming encoding of metrics
...
Signed-off-by: beorn7 <beorn@soundcloud.com>
2018-10-22 01:04:52 +02:00
glefloch
c2c6fd2ab4
Fix PR comments
...
Signed-off-by: glefloch <glfloch@gmail.com>
2018-10-19 13:51:45 +02:00
glefloch
fdf4cbc87b
Use sync.Pool for gzipWriter
...
Signed-off-by: glefloch <glfloch@gmail.com>
2018-10-17 13:17:33 +02:00
Eric Daniels
2d0312e3dd
forgot some &s
...
Signed-off-by: Eric Daniels <eric@erdaniels.com>
2018-07-13 09:28:19 -04: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
Karsten Weiss
d7590aab3c
Fix three shadow variable warnings (govet -shadow)
...
Fixes:
http.go:118: declaration of "part" shadows declaration at http.go:117
http_test.go:50: declaration of "respBody" shadows declaration at http_test.go:25
promhttp/http.go:305: declaration of "part" shadows declaration at promhttp/http.go:304
Signed-off-by: Karsten Weiss <knweiss@gmail.com>
2018-04-13 23:25:14 +02:00
Karsten Weiss
958ea82988
Fix typos
...
Signed-off-by: Karsten Weiss <knweiss@gmail.com>
2018-04-13 23:23:52 +02:00
Luke Hanley
f504d69aff
promhttp: fix DNSDone should call Done, not Start ( #395 )
...
When tracing, it appears DNSDone is instead calling the supplied DNSStart function
2018-03-28 15:04:30 +02:00
Brian Brazil
02aee00fdb
Fix a typo
2018-02-14 11:10:46 +00:00
beorn7
c551c3c661
promhttp: Introduce limit for connections in flight and timeout
2018-02-09 17:05:10 +01:00
beorn7
8fd47d2e8f
Provide an InstrumentedHandler
...
See https://github.com/prometheus/client_golang/issues/316 for details.
2018-02-08 16:27:51 +01:00
beorn7
e87046a87e
Fix more interface upgrade bugs
2018-02-02 15:53:28 +01:00