标签: spring-micrometer

MicroMeter:删除/禁用某个标签

我正在使用默认的 MicroMeter 活页夹,其中之一创建了 Gauage jvm.memory.used。问题在于它带有 2 个 availableTags:“area”和“id”。这实际上生成了我不感兴趣的 6 个仪表。

我能够做到这一点:

@Bean
public MeterRegistryCustomizer<MeterRegistry> metricsCustomizer() {

    return  registry -> {
        registry.config().meterFilter(MeterFilter.ignoreTags("id"));
    };
}
Run Code Online (Sandbox Code Playgroud)

但这将忽略带有此标签的所有仪表

我怎么deny()只能jvm.memory.usedid标签?

谢谢!

编辑:
查看 globalRegistry:

Metrics.globalRegistry.getRegistries().iterator().next().meterMap

每次Meterjvm.memory.used是以下结构:

"MeterId{name='jvm.memory.used', tags=[tag(area=nonheap),tag(id=Metaspace)]}"

所以我们不能只是过滤 getName().equals("jvm.memory.used") && getTag("id") != null

java spring-boot spring-boot-actuator micrometer spring-micrometer

4
推荐指数
1
解决办法
2109
查看次数

Spring Boot 执行器的 /beans 不可访问

尝试使用具有执行器依赖项的简单 Spring Boot 应用程序,但无法访问http://localhost:8080/actuator/beans

\n\n

我可以使用以下输出访问http://localhost:8080/actuator :

\n\n
{"_links":{"self":{"href":"http://localhost:8080/actuator","templated":false},"health-component-instance":{"href":"http://localhost:8080/actuator/health/{component}/{instance}","templated":true},"health-component":{"href":"http://localhost:8080/actuator/health/{component}","templated":true},"health":{"href":"http://localhost:8080/actuator/health","templated":false},"info":{"href":"http://localhost:8080/actuator/info","templated":false}}}\n
Run Code Online (Sandbox Code Playgroud)\n\n

另外,主要无法访问此处列出的以下网址

\n\n
/auditevents \xe2\x80\x93 lists security audit-related events such as user login/logout. Also, we can filter by principal or type among others fields\n/beans \xe2\x80\x93 returns all available beans in our BeanFactory. Unlike \n/auditevents, it doesn\xe2\x80\x99t support filtering\n/conditions \xe2\x80\x93 formerly known as /autoconfig, builds a report of conditions around auto-configuration\n/configprops \xe2\x80\x93 allows us to fetch all @ConfigurationProperties beans\n/env \xe2\x80\x93 returns the current environment properties. Additionally, we can retrieve …
Run Code Online (Sandbox Code Playgroud)

java spring spring-boot spring-boot-actuator spring-micrometer

4
推荐指数
1
解决办法
3010
查看次数

如何使用 Spring-Boot 的 RestTemplate 在 uri 标签中获取 http-client-requests 指标的模板化值?

我们正在使用 Spring Boot 2.1.4 和micrometer-registry-prometheus依赖项来捕获指标。

我们有一个 Spring Boot 服务使用 RestTemplate 调用另一个服务的情况。此调用生成的指标包含 URI 中的实际值,而不是模板化值。

例如,在/actuator/prometheus端点中,我看到如下条目:

http_client_requests_seconds_count{clientName="someClient",method="GET",status="200",uri="/person/lookup?firstName=Tony&lastName=Soprano",} 1.0

根据文档,我希望看到变量名称而不是值,如下所示:

http_client_requests_seconds_count{clientName="someClient",method="GET",status="200",uri="/person/lookup?firstName={firstName}&lastName={lastName}",} 1.0

有没有办法获取默认http.client.requests指标值以使用 URI 标记的模板化值?

https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-features.html#production-ready-metrics-http-clients 上的 Spring 文档说明了关于 uri 标签的内容:

如果可能,在变量替换之前请求的 URI 模板(例如,/api/person/{id})

我们如何使变量替换成为可能?

spring resttemplate spring-boot spring-boot-actuator spring-micrometer

4
推荐指数
1
解决办法
2571
查看次数

如何配置弹簧千分尺标签

这篇博文“Micrometer:Spring Boot 2 的新应用程序指标收集器”提到了“维度的重要性”

但是,它没有包含如何在 Spring Boot 应用程序中设置关联标签的足够示例。

现在,我正在使用 Spring Boot 2 的 Micrometer 接口来提供 Prometheus 就绪的输出,而无需进行任何基于 Java 的配置。例如,设置“主机”标签是否需要我编写一些代码?那会是什么样子?

这是我的整个配置:

management:
  metrics:
    export:
      prometheus:
        enabled: true
  endpoints:
    web:
      exposure:
        include: info,health,metrics,prometheus
Run Code Online (Sandbox Code Playgroud)

spring-boot-actuator prometheus spring-micrometer

4
推荐指数
1
解决办法
5325
查看次数

如何用Spring Boot启动千分尺?

我想通过千分尺将石墨指标添加到我的 Spring Boot 应用程序中。

我将其添加到我的 pom 中

    <!-- https://mvnrepository.com/artifact/io.micrometer/micrometer-registry-graphite -->
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-registry-graphite</artifactId>
        <version>1.5.5</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-actuator -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
        <version>2.3.4.RELEASE</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

并将注册表定义为:

@Configuration
public class MircoMeterConfig {

    @Bean
    MeterRegistryCustomizer meterRegistryCustomizer(MeterRegistry meterRegistry) {
        return registry -> {
            meterRegistry.config().commonTags("application", "name");
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我运行该应用程序时,我收到此错误:

io.micrometer.core.instrument.config.validate.Validated
Run Code Online (Sandbox Code Playgroud)

这是完整的堆栈跟踪。

2020-10-12 20:37:05.332  INFO 34747 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1243 ms
2020-10-12 20:37:05.343 ERROR 34747 --- [           main] o.s.b.web.embedded.tomcat.TomcatStarter  : Error starting Tomcat context. Exception: org.springframework.beans.factory.UnsatisfiedDependencyException. Message: Error creating …
Run Code Online (Sandbox Code Playgroud)

graphite spring-boot spring-boot-actuator micrometer spring-micrometer

4
推荐指数
1
解决办法
2万
查看次数

使用 kafka spring boot 3 和 opentelemetry 进行分布式跟踪不起作用

我想尝试在 Spring Boot 3 Kafka 生产者和消费者之间进行跟踪。我按照https://spring.io/blog/2022/10/12/observability-with-spring-boot-3中的示例进行操作 ,当我在生产者和消费者之间使用resttemplate进行API调用时,会自动添加traceID,但是卡夫卡消息不携带它们。我使用了以下依赖项

 <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-tracing-bridge-otel</artifactId>
        </dependency>

        <dependency>
            <groupId>io.opentelemetry</groupId>
            <artifactId>opentelemetry-exporter-zipkin</artifactId>
        </dependency>
     <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
            <version>3.0.0</version>
        </dependency>
Run Code Online (Sandbox Code Playgroud)

卡夫卡生产者配置

@Bean
public ProducerFactory<String, String> producerFactory() {
    Map<String, Object> configProps = new HashMap<>();
    //typical properties 
    return new DefaultKafkaProducerFactory<>(configProps);
}

@Bean
public KafkaTemplate<String, String> kafkaTemplate(ProducerFactory<String, String> producerFactory) {
    KafkaTemplate<String, String> stringStringKafkaTemplate = new KafkaTemplate<>(producerFactory);
    stringStringKafkaTemplate.setObservationEnabled(true);//trying out with
    return stringStringKafkaTemplate;
}
Run Code Online (Sandbox Code Playgroud)

发送消息

    kafkaTemplate.send("topic-1" , "message");
Run Code Online (Sandbox Code Playgroud)

在消费者方面:

    @KafkaListener(topics = "topic-1", groupId = "group1")
    public void listenGroupFoo(String message) {
        logger.info("Received Message in …
Run Code Online (Sandbox Code Playgroud)

spring-boot spring-kafka spring-micrometer micrometer-tracing

4
推荐指数
1
解决办法
6806
查看次数

用千分尺测量事件发生率

在 Dropwizard 中有类似meter的东西: httpsmark() ://metrics.dropwizard.io/3.1.0/getting-started/#meters 它让我只需通过调用指标上的方法 来测量事件的发生率。

我怎样才能在千分尺中做到这一点?

我可以使用计时器,但我不想将Timer.Sample对象传递到需要调用stop()方法的任何地方。

与 Dropwizard 相比,Micrometer 中另一个缺少的东西是可以包含文本消息的度量,如 Dropwizard 中的量规。

dropwizard micrometer spring-micrometer

3
推荐指数
1
解决办法
5511
查看次数

Spring Boot REST API的度量标准集合

我正在尝试为我的Spring Boot(2.1.0.RELEASE)应用程序收集指标。具体来说,我想知道

  1. 没有次数调用单个REST端点。
  2. 每个端点处理请求所花费的时间。
  3. 我的请求被处理/出错的平均速率。

执行器/actuator/metrics端点提供了很多信息,但是我不确定这些信息是否对我的情况有用。另外,有人可以告诉@Timed(或任何其他现成的注释)是否可用于实现这些统计信息,或者我必须在每个控制器方法中使用类似以下的内容:

  Timer timer = new SimpleMeterRegistry().timer("timer.name");
timer.record(() -> {
    // all logic here
});
Run Code Online (Sandbox Code Playgroud)

我尝试在控制器方法上使用@Timed,但它没有向/actuator/metrics端点添加任何新响应。

java spring-boot spring-boot-actuator spring-micrometer

3
推荐指数
1
解决办法
444
查看次数

MeterRegistry 计数器测试用例失败

我已经通过注入和增加计数在我的服务中实现了 Micrometer Prometheus 计数器,MeterRegistry如下所示,并且我还编写了一个测试用例,但是当我运行测试用例时,我得到:

“java.lang.NullPointerException:无法调用“io.micrometer.core.instrument.MeterRegistry.counter(String, String[])”,因为“this.meterRegistry”为空”。

服务文件:

@Autowired
private MeterRegistry meterRegistry;
    
public void counterIncrement() { 
    meterRegistry.counter("test_count").increment();
}
Run Code Online (Sandbox Code Playgroud)

测试用例文件:

@MockBean
private MeterRegistry registry;
     
@Test
void testCounter() {
    //  invoking counterIncrement();
}
Run Code Online (Sandbox Code Playgroud)

junit spring-boot micrometer spring-micrometer

3
推荐指数
1
解决办法
9270
查看次数

千分尺单元测试 Java

我创建了一个 Micrometer 类,其中创建并递增计数器。如何为公共方法编写单元测试用例并避免向 Micrometer 注册或发送事件。

public class MicroMeter {
private static final MeterRegistry registry = Metrics.globalRegistry;
private Counter createCounter(final String meterName, Map<String, String> mp) {

    List<Tag> tags = new ArrayList<>();
    for (Map.Entry<String, String> entry : mp.entrySet()) {
        tags.add(Tag.of(entry.getKey(), entry.getValue()));
    }
    return Counter
            .builder(meterName)
            .tags(tags)
            .register(registry);
}

private void incrementCounter(Counter counter)  {
        counter.increment();
}

public static void createCounterAndIncrement(final String meterName, Map<String, String> mp){
    MicroMeter microMeter = new MicroMeter();
    Counter counter = microMeter.createCounter(meterName, dimensions);
    microMeter.incrementCounter(counter);
}
Run Code Online (Sandbox Code Playgroud)

}

java spring spring-boot micrometer spring-micrometer

3
推荐指数
1
解决办法
6197
查看次数