Spring Boot Micrometer metrics for MongoDB



我使用弹簧套2.2.5+千分尺1.3.5+启动器数据mongodb

在"io.mimer.core.interface.binder.mongodb"下,我可以看到两个类CommandListener和ConnectionPoolListener。我想知道这些有什么用?

在执行器指标端点中,mongo指标不可用。

如何在执行器中启用mongodb的度量?例如,actuator会自动显示RabbitMQ的几个度量。在MongoDB的情况下,我也期待着类似的东西。我应该创建自己的指标吗?

为了启用Spring Boot应用其自动配置,我建议使用自定义程序模式:

科特林:

@Configuration
class MongoConfiguration {
@Bean
fun mongoClientSettingsBuilderCustomizer(meterRegistry: MeterRegistry) =
MongoClientSettingsBuilderCustomizer {
it.addCommandListener(MongoMetricsCommandListener(meterRegistry))}
}

Java:

@Configuration
public class MongoConfiguration {
@Bean
public MongoClientSettingsBuilderCustomizer mongoClientSettingsBuilderCustomizer(MeterRegistry meterRegistry) {
return builder -> builder.addCommandListener(new MongoMetricsCommandListener(meterRegistry));
}
}

请注意,您目前在度量中既看不到与spring数据存储库的关系,也看不到与其mongo集合的关系。参见未决问题


编辑(07/30/2021(:

这些问题已经解决,因此您可能会在当前版本中获得收集指标。

添加这些侦听器并不像我想象的那样简单,而且它完全取决于您用于配置Spring Data MongoDB的属性。

集成的关键是自定义com.mongodb.MongoClientSettings实例,该实例用于创建MongoClient。有多种方法可以做到这一点,如使用Spring 连接MongoDB中所述

以下是一个基于Spring Boot 2.3的工作示例(从我们的应用程序简化而来(,该示例假设您使用Spring.data.mongodb.uri在application.properties中指定连接字符串。

package com.example.demo;
import com.mongodb.ConnectionString;
import com.mongodb.MongoClientSettings;
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.binder.mongodb.MongoMetricsCommandListener;
import io.micrometer.core.instrument.binder.mongodb.MongoMetricsConnectionPoolListener;
import org.springframework.boot.autoconfigure.mongo.MongoProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.core.MongoClientFactoryBean;
@Configuration
public class MongoConfiguration {
@Bean
public MongoClientFactoryBean mongoClientFactoryBean(MongoProperties properties, MeterRegistry meterRegistry) {
MongoClientFactoryBean mongoClientFactoryBean = new MongoClientFactoryBean();
mongoClientFactoryBean.setConnectionString(new ConnectionString(properties.getUri()));
MongoClientSettings settings = MongoClientSettings.builder()
.addCommandListener(new MongoMetricsCommandListener(meterRegistry))
.applyToConnectionPoolSettings(builder ->
builder.addConnectionPoolListener(new MongoMetricsConnectionPoolListener(meterRegistry)))
.build();
mongoClientFactoryBean.setMongoClientSettings(settings);
return mongoClientFactoryBean;
}
}

不幸的是,从Spring Boot 2.2到2.3配置MongoDB有很多问题。如果你不能使用Spring Boot 2.3,并且你一直在将其移植到2.2,请告诉我。

简短回答

使用addCommandListener创建一个MongoClientOptionsbean,就可以开始了。

@Configuration
public class MongoConfiguration {
@Autowired
private MeterRegistry meterRegistry;
@Bean
public MongoClientOptions myMongoClientOptions() {
return MongoClientOptions.builder()
.addCommandListener(new MongoMetricsCommandListener(meterRegistry)).build();
}
}

@chargue的答案对spring-data-mongodb的某些版本无效。因为org.springframework.boot.autoconfigure.mongo.MongoAutoConfigurationMongoClientOptions而不是MongoClientSettings初始化MongoClient。它可能在较新版本的spring-data-mongodb中工作,因为根据mongodb的文档,MongoClientSettings是推荐的方式。

@Bean
@ConditionalOnMissingBean(type = { "com.mongodb.MongoClient", "com.mongodb.client.MongoClient" })
public MongoClient mongo(MongoProperties properties, ObjectProvider<MongoClientOptions> options,
Environment environment) {
return new MongoClientFactory(properties, environment).createMongoClient(options.getIfAvailable());
}

确保普罗米修斯和千分尺设置正确。您应该在prometheus端点中看到mongo度量,如下所示:

# HELP process_cpu_usage The "recent cpu usage" for the Java Virtual Machine process
# TYPE process_cpu_usage gauge
process_cpu_usage{application="",} 0.004362672325272289
# HELP mongodb_driver_commands_seconds_max Timer of mongodb commands
# TYPE mongodb_driver_commands_seconds_max gauge
mongodb_driver_commands_seconds_max{application="",cluster_id="60b0d12d73b6df671cb4d882",command="find",server_address="",status="SUCCESS",} 34.684200332
mongodb_driver_commands_seconds_max{application="",cluster_id="60b0d12d73b6df671cb4d882",command="buildInfo",server_address="",status="SUCCESS",} 0.263514375
# HELP mongodb_driver_commands_seconds Timer of mongodb commands
# TYPE mongodb_driver_commands_seconds summary
mongodb_driver_commands_seconds_count{application="",cluster_id="60b0d12d73b6df671cb4d882",command="find",server_address="",status="SUCCESS",} 1.0
mongodb_driver_commands_seconds_sum{application="",cluster_id="60b0d12d73b6df671cb4d882",command="find",server_address="",status="SUCCESS",} 34.684200332
mongodb_driver_commands_seconds_count{application="",cluster_id="60b0d12d73b6df671cb4d882",command="buildInfo",server_address="",status="SUCCESS",} 1.0
mongodb_driver_commands_seconds_sum{application="",cluster_id="60b0d12d73b6df671cb4d882",command="buildInfo",server_address="",status="SUCCESS",} 0.263514375

最新更新