You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过SpringBoot获取Cassandra连接客户端及推送自定义指标至Prometheus?

Cassandra客户端监控与自定义指标推送Prometheus实现方案

1. SpringBoot获取Cassandra客户端连接信息

  • 通过Cassandra系统表查询:Cassandra内置system_views.client_connections系统表,存储所有活跃客户端的连接详情(IP、连接时间、协议版本等)。在SpringBoot中可通过CqlSession直接执行查询:
@Autowired
private CqlSession cqlSession;

public List<Map<String, Object>> getActiveClients() {
    ResultSet resultSet = cqlSession.execute("SELECT client_ip, connection_time, protocol_version FROM system_views.client_connections");
    return resultSet.all().stream()
            .map(Row::toMap)
            .collect(Collectors.toList());
}
  • 通过JMX接口获取:连接Cassandra默认JMX端口(7199),调用org.apache.cassandra.db:type=ClientState下的MBean方法获取客户端列表。SpringBoot中可借助JmxConnector实现JMX连接与数据读取。

2. 捕获客户端IP、查询语句并推送Prometheus

步骤1:捕获客户端查询数据

  • 启用Cassandra查询日志:修改cassandra.yaml配置文件,开启全量或慢查询日志,日志条目包含客户端IP、查询语句、执行时长等信息:
query_logging_options:
    enabled: true
    log_level: INFO
    logger_class: org.apache.cassandra.db.MarkerBasedQueryLogger
  • 自定义Query拦截器:实现org.apache.cassandra.cql3.QueryHandler接口,在process方法中拦截查询请求,直接提取客户端IP和语句内容。

步骤2:SpringBoot收集并推送指标

  • 引入Micrometer Prometheus依赖:
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
  • 自定义计数器指标,按客户端IP和查询类型维度统计:
@Autowired
private MeterRegistry meterRegistry;

private String extractQueryType(String query) {
    // 简单解析查询类型,实际可使用语法解析库优化
    return query.trim().split("\\s+")[0].toUpperCase();
}

public void trackClientQuery(String clientIp, String query) {
    String queryType = extractQueryType(query);
    Counter.builder("cassandra_client_queries_total")
            .tag("client_ip", clientIp)
            .tag("query_type", queryType)
            .register(meterRegistry)
            .increment();
}
  • 暴露Prometheus端点:在application.properties中配置:
management.endpoints.web.exposure.include=prometheus
management.metrics.tags.application=cassandra-monitor

Prometheus可通过http://<springboot-host>:<port>/actuator/prometheus拉取指标。

3. 创建Cassandra自定义指标并推送Prometheus

方式一:Cassandra端自定义JMX指标+Prometheus JMX Exporter

  • 编写自定义MBean:实现业务指标逻辑(如特定表读写次数统计),注册到Cassandra的JMX服务器。
  • 配置Prometheus JMX Exporter:通过exporter抓取Cassandra的JMX指标(含自定义MBean),Prometheus直接从exporter拉取数据。

方式二:SpringBoot定时收集推送

  • 定时查询Cassandra获取自定义指标值,注册为Micrometer指标:
@Scheduled(fixedRate = 60000) // 每分钟更新一次
public void refreshCustomMetrics() {
    // 示例:统计业务表行数
    long orderCount = cqlSession.execute("SELECT COUNT(*) FROM commerce.orders").one().getLong(0);
    Gauge.builder("cassandra_commerce_orders_total", () -> orderCount)
            .description("Total rows in commerce.orders table")
            .register(meterRegistry);

    // 示例:统计活跃连接数
    long activeConnections = cqlSession.execute("SELECT COUNT(*) FROM system_views.client_connections").one().getLong(0);
    Gauge.builder("cassandra_active_clients_total", () -> activeConnections)
            .description("Total active Cassandra clients")
            .register(meterRegistry);
}
  • 确保Prometheus配置中包含SpringBoot actuator端点的抓取任务,即可获取自定义指标。

内容的提问来源于stack exchange,提问作者enthusiast

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 18:52:55