CqlSession.getMetrics() returning null value, even after configuration for enabling the metrics has been added to it.

@Autowired
private CqlSession cqlsession;

MetricRegistry metricRegistry = cqlsession.getMetrics()
            .orElseThrow(() -> new IllegalArgumentException("not able to get metrics"))
            .getRegistry();

application.properties:

datastax-java-driver.advanced.metrics {
  session.enabled = [connected-nodes, cql-requests]
  node.enabled = [pool.open-connections, pool.in-flight]
}

Comment From: wilkinsona

Your application.properties configuration doesn't look like it is in the correct format. It looks like Cassandra driver's .conf file format to me. Perhaps a typo in the file's name in the description above?

Using application.conf won't fix your problem as, when using Spring Boot's auto-configuration of Cassandra's Driver, application.conf is not used. The supported mechanisms for configuring Cassandra are described in the documentation. In your case, you should use a DriverConfigLoaderBuilderCustomizer bean:

@Bean
DriverConfigLoaderBuilderCustomizer metricsCustomizer() {
    return (builder) -> {
        builder.withStringList(DefaultDriverOption.METRICS_SESSION_ENABLED,
                Arrays.asList("connected-nodes", "cql-requests"));
        builder.withStringList(DefaultDriverOption.METRICS_NODE_ENABLED,
                Arrays.asList("pool.open-connections", "pool.in-flight"));
    };
}

We should probably update the documentation to clarify that application.conf is not used by the auto-configured DriverConfigLoader.

Comment From: Esakkimuthu991

Your application.properties configuration doesn't look like it is in the correct format. It looks like Cassandra driver's .conf file format to me. Perhaps a typo in the file's name in the description above?

Using application.conf won't fix your problem as, when using Spring Boot's auto-configuration of Cassandra's Driver, application.conf is not used. The supported mechanisms for configuring Cassandra are described in the documentation. In your case, you should use a DriverConfigLoaderBuilderCustomizer bean:

java @Bean DriverConfigLoaderBuilderCustomizer metricsCustomizer() { return (builder) -> { builder.withStringList(DefaultDriverOption.METRICS_SESSION_ENABLED, Arrays.asList("connected-nodes, cql-requests")); builder.withStringList(DefaultDriverOption.METRICS_NODE_ENABLED, Arrays.asList("pool.open-connections", "pool.in-flight")); }; }

We should probably update the documentation to clarify that application.conf is not used by the auto-configured DriverConfigLoader.

After changing my code to use above as suggested.

cqlsessionmetrics

Its Skip the properties and returns empty as earlier for cqlsession.getMetrics()

Comment From: wilkinsona

Sorry, that was a typo in my code snippet. I've edited it above to correct it. It should have read Arrays.asList("connected-nodes", "cql-requests") rather than Arrays.asList("connected-nodes, cql-requests").

Comment From: Esakkimuthu991

Sorry, that was a typo in my code snippet. I've edited it above to correct it. It should have read Arrays.asList("connected-nodes", "cql-requests") rather than Arrays.asList("connected-nodes, cql-requests").

Thanks Solved my problem