Comments (10)
There is, however you should never want to do this outside of unittests.
You should probably be removing the label in question.
from client_java.
Is it true that my assumption can induce OutOfMemory error?
from client_java.
Having many children can run you out of memory, but you're using the library in very much the wrong way if that's an issue. Prometheus is a metrics system, not a logging system.
from client_java.
I haven't been using that library in wrong way yet. But I'm concerned about this problem after I having looked through entire library's code and haven't found the code that removes children or collectors at all.
from client_java.
In normal usage you'd never remove children, they're intended to stick around until the process dies.
If this is a problem for you, then you're using the library in the wrong way.
from client_java.
Could you please tell me whether I'm using library properly? I have a web application and it writes metrics on each request to this application. I had debugged this code and saw that the instances of the collector's children are accumulated.
from client_java.
What labels are on these metrics, and what are their cardinalities? It sounds like you have something as a label that you shouldn't have.
from client_java.
I described two metrics:
private static final Counter requestsCounter = Counter.build()
.name('http_requests_total')
.help('Request amount')
.labelNames('service', 'code', 'method', 'url')
.register()
private static final Histogram requestsDuration = Histogram.build()
.name('http_request_duration_milliseconds')
.help('Request process duration in milliseconds')
.labelNames('service', 'code', 'method', 'url')
.register()
Each http request it writes metrics like this:
requestsCounter
.labels(componentName, String.valueOf(response.getStatus()), request.getMethod(), uri)
.inc()
requestsDuration
.labels(componentName, String.valueOf(response.getStatus()), request.getMethod(), uri)
.observe(duration)
The metrics that are transferred:
...
http_request_duration_milliseconds_bucket{service="skybonds-data-api",code="200",method="GET",url="${api.root.path}/debug/metrics/prometheus",le="0.005",} 0.0
http_request_duration_milliseconds_bucket{service="skybonds-data-api",code="200",method="GET",url="${api.root.path}/debug/metrics/prometheus",le="0.01",} 0.0
http_request_duration_milliseconds_bucket{service="skybonds-data-api",code="200",method="GET",url="${api.root.path}/debug/metrics/prometheus",le="0.025",} 0.0
http_request_duration_milliseconds_bucket{service="skybonds-data-api",code="200",method="GET",url="${api.root.path}/debug/metrics/prometheus",le="0.05",} 0.0
http_request_duration_milliseconds_bucket{service="skybonds-data-api",code="200",method="GET",url="${api.root.path}/debug/metrics/prometheus",le="0.075",} 0.0
http_request_duration_milliseconds_bucket{service="skybonds-data-api",code="200",method="GET",url="${api.root.path}/debug/metrics/prometheus",le="0.1",} 0.0
http_request_duration_milliseconds_bucket{service="skybonds-data-api",code="200",method="GET",url="${api.root.path}/debug/metrics/prometheus",le="0.25",} 0.0
http_request_duration_milliseconds_bucket{service="skybonds-data-api",code="200",method="GET",url="${api.root.path}/debug/metrics/prometheus",le="0.5",} 0.0
http_request_duration_milliseconds_bucket{service="skybonds-data-api",code="200",method="GET",url="${api.root.path}/debug/metrics/prometheus",le="0.75",} 0.0
http_request_duration_milliseconds_bucket{service="skybonds-data-api",code="200",method="GET",url="${api.root.path}/debug/metrics/prometheus",le="1.0",} 0.0
http_request_duration_milliseconds_bucket{service="skybonds-data-api",code="200",method="GET",url="${api.root.path}/debug/metrics/prometheus",le="2.5",} 0.0
http_request_duration_milliseconds_bucket{service="skybonds-data-api",code="200",method="GET",url="${api.root.path}/debug/metrics/prometheus",le="5.0",} 0.0
http_request_duration_milliseconds_bucket{service="skybonds-data-api",code="200",method="GET",url="${api.root.path}/debug/metrics/prometheus",le="7.5",} 0.0
http_request_duration_milliseconds_bucket{service="skybonds-data-api",code="200",method="GET",url="${api.root.path}/debug/metrics/prometheus",le="10.0",} 0.0
http_request_duration_milliseconds_bucket{service="skybonds-data-api",code="200",method="GET",url="${api.root.path}/debug/metrics/prometheus",le="+Inf",} 1.0
http_request_duration_milliseconds_count{service="skybonds-data-api",code="200",method="GET",url="${api.root.path}/debug/metrics/prometheus",} 1.0
http_request_duration_milliseconds_sum{service="skybonds-data-api",code="200",method="GET",url="${api.root.path}/debug/metrics/prometheus",} 11.0
...
from client_java.
If you've lots of services or urls that's going to be a problem.
It's also reocmmended to use seconds everywhere, and not break out latency by status code.
from client_java.
Ok, thanks a lot
from client_java.
Related Issues (20)
- Endpoint actuator/prometheus not working on macOS HOT 1
- Publish a BOM again
- Implement latest changes in the Prometheus Protobuf format
- [httpserver exporter] No option to specify a wait time for ongoing requests when closing the server HOT 3
- Explicit Exception for Duplicate Labels during Scrape HOT 1
- Stress test failure in DropwizardExportsTest HOT 2
- Stress test failure in SlidingWindowTest HOT 1
- dropwizard5 MapperConfig doesn't rename the metric? HOT 4
- How to remove all metrics in the defaultRegistry HOT 5
- Failing while building simpleclient_httpserver version parent-0.15.0 using mvn clean install HOT 4
- log4j2 instrumentation support for 1.X?
- Flaky test - SlidingWindowTest
- Filter parameter causes HTTP Status 400 – Bad Request HOT 1
- info required for compatible version with openjdk21 HOT 2
- Counts in ClassicHistogramBuckets cannot be negative. HOT 1
- StatefulMetric clear() invocation causes noLabels increase to stop reporting on collect()
- Integrating Native Histograms with Spring 2.7.x and Prometheus client_java 1.3.1: Challenges in Writing Native Histograms to Response Object
- Inconsistencies between PrometheusNaming.sanitizeMetricName() methods
- UnknownDataPointSnapshot constructor ignores labels
- [FeatureRequest] Restore MetricsFilter in the servlet modules
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from client_java.