Comments (3)
Test Case; multiple methods annotated with @Timed
, the same value
to group them together and enable histogram
only on some.. This worked in previous versions.
@Service
public class TimedAnnotationService {
private final AtomicInteger atomicInteger = new AtomicInteger();
@Timed(value = "timed.increase")
public int timedIncrease() {
return atomicInteger.incrementAndGet();
}
@Timed(value = "timed.increase", histogram = true)
public int timedHistogramIncrease() {
return atomicInteger.incrementAndGet();
}
}
Test:
@ExtendWith(SpringExtension.class)
@SpringBootTest
@AutoConfigureObservability
class MicrometerTest {
@Autowired
private MeterRegistry meterRegistry;
@Autowired
private TimedAnnotationService timedService;
@Test
void testMicrometerTimedHistogramAnnotation() throws Exception {
assertThat(timedService.timedIncrease()).isEqualTo(1);
assertThat(timedService.timedHistogramIncrease()).isEqualTo(2);
((PrometheusMeterRegistry) meterRegistry).scrape("application/openmetrics-text; version=1.0.0; charset=utf-8");
}
}
Results in:
java.lang.ClassCastException: class io.prometheus.metrics.model.snapshots.SummarySnapshot$SummaryDataPointSnapshot cannot be cast to class io.prometheus.metrics.model.snapshots.HistogramSnapshot$HistogramDataPointSnapshot (io.prometheus.metrics.model.snapshots.SummarySnapshot$SummaryDataPointSnapshot and io.prometheus.metrics.model.snapshots.HistogramSnapshot$HistogramDataPointSnapshot are in unnamed module of loader 'app')
at io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter.writeClassicHistogramBuckets(OpenMetricsTextFormatWriter.java:125)
at io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter.writeHistogram(OpenMetricsTextFormatWriter.java:120)
at io.prometheus.metrics.expositionformats.OpenMetricsTextFormatWriter.write(OpenMetricsTextFormatWriter.java:72)
at io.micrometer.prometheusmetrics.PrometheusMeterRegistry.scrape(PrometheusMeterRegistry.java:167)
at io.micrometer.prometheusmetrics.PrometheusMeterRegistry.scrape(PrometheusMeterRegistry.java:163)
at io.micrometer.prometheusmetrics.PrometheusMeterRegistry.scrape(PrometheusMeterRegistry.java:136)
from spring-boot.
This can be reproduced without any involvement from Spring Boot:
package com.example;
import io.micrometer.core.instrument.Timer;
import io.micrometer.core.instrument.Timer.Sample;
import io.micrometer.prometheusmetrics.PrometheusConfig;
import io.micrometer.prometheusmetrics.PrometheusMeterRegistry;
public class Reproducer {
public static void main(String[] args) throws InterruptedException {
PrometheusMeterRegistry registry = new PrometheusMeterRegistry(new PrometheusConfig() {
@Override
public String get(String key) {
return null;
}
});
timed(registry, false, "one");
timed(registry, true, "two");
System.out.println(registry.scrape("application/openmetrics-text; version=1.0.0; charset=utf-8"));
}
static void timed(PrometheusMeterRegistry registry, boolean histogram, String methodName) throws InterruptedException {
Sample sample = Timer.start(registry);
Thread.sleep(500);
sample.stop(Timer.builder("example").publishPercentileHistogram(histogram).tag("method-name", methodName).register(registry));
}
}
Please report the problem to the Micrometer project.
from spring-boot.
Thanks Andy!
from spring-boot.
Related Issues (20)
- Upgrade to HSQLDB 2.7.3
- Upgrade to Jersey 3.1.7
- Upgrade to Jetty Reactive HTTPClient 4.0.5
- Upgrade to Jetty 12.0.10
- Upgrade to jOOQ 3.19.9
- Upgrade to Maven Help Plugin 3.4.1
- Upgrade to MSSQL JDBC 12.6.2.jre11
- Upgrade to Netty 4.1.111.Final
- Support of CTE with Pageable HOT 1
- Use Collection-based construction rather than separate construction and addAll()
- SystemProperties ignored in spring-boot-maven-plugin if -Dspring.context.exit=onRefresh is specified HOT 8
- Polish code to use 'switch' instead of 'if', remove unessary unboxing and redundant cast
- Replace lambda with method reference
- AOT causes Logback configuration error when using include HOT 2
- DataSourceProperties fail to bind if java.sql module isn't included HOT 9
- DataSourceProperties fail to bind if java.sql module isn't included
- Custom actuator endpoint doesn't work after upgrading to Spring Boot 3.0.0 HOT 2
- Add Support for --project-name Option in Docker Compose HOT 3
- restTemplate.exchange have exception "insufficient data written" with springboot 3.3 HOT 1
- restTemplate.exchange have exception "insufficient data written" with springboot 3.3 HOT 1
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 spring-boot.