我想启用 cassandra cqlsession 指标。 当尝试注册 cqlsession 指标时,它会在 springboot 应用程序中提供 optional.empty((。这里使用的是 cassandra datastax java 驱动程序 4.6。
这是我的代码:
@Autowired
private CqlSession cqlsession;
MetricRegistry metricRegistry = cqlsession.getMetrics()
.orElseThrow(() -> new IllegalArgumentException("not able to get metrics"))
.getRegistry();
抛出非法参数异常错误。
当引用Cassandra Datastax(https://docs.datastax.com/en/developer/java-driver/4.6/manual/core/metrics/#configuration(的官方文档时,添加到项目中的同一组conf文件不能解决问题
我已经用以下方法解决了这个问题:
配置类
import static com.datastax.oss.driver.api.core.config.DefaultDriverOption.METRICS_NODE_ENABLED;
import static com.datastax.oss.driver.api.core.config.DefaultDriverOption.METRICS_SESSION_ENABLED;
import org.springframework.boot.autoconfigure.cassandra.DriverConfigLoaderBuilderCustomizer;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableConfigurationProperties(CassandraProperties.class)
public class CassandraMetricsConfig {
@Bean
DriverConfigLoaderBuilderCustomizer configLoaderBuilderCustomizer(CassandraProperties cassandraProperties) {
return builder -> {
builder.withStringList(METRICS_SESSION_ENABLED, cassandraProperties.getSessionMetrics());
builder.withStringList(METRICS_NODE_ENABLED, cassandraProperties.getNodeMetrics());
};
}
}
属性类
@ConfigurationProperties(prefix = "cassandra")
@Data
public class CassandraProperties {
@NotNull
private List<String> sessionMetrics = new ArrayList<>();
@NotNull
private List<String> nodeMetrics = new ArrayList<>();
}
应用程序.yml
cassandra:
session-metrics:
- bytes-sent
- connected-nodes
...
node-metrics:
- pool.open-connections
- pool.in-flight
...
请注意,此方法仅适用于不需要其他配置(如 cql 请求(的指标。如果要监视 cql 请求,则必须扩展示例以配置所需的属性。