使用 Cassandra Metrics 进行监控

Using Cassandra Metrics for monitoring

一段时间以来,我一直在使用 Cassandra 及其 C++ 驱动程序编写 API 来插入和获取数据。但是现在我已经创建了我的集群,我想为我的集群开发监控工具。

我想构建一个应用程序(最好是用 C++,我不想使用第三方应用程序),它将存储集群管理特定的属性,例如集群中每个节点的内存利用率、每个操作的延迟,space 被每个节点上的每个 table 占用等等。我读到了关于 Cassandra 中的指标(https://cassandra.apache.org/doc/latest/operating/metrics.html),但我不知道如何在构建我的应用程序时使用它们之前没有在 Java 上工作过(对不起!)。 可以使用 C++ 构建这样的应用程序吗?如果在 C++ 中有很多工作,那么如果您可以共享一些 Java 代码,其中这些 Cassandra 指标已用于监视 Cassandra 集群,将会非常有益。

OS:RHEL 卡桑德拉版本:3.11.2

Cassandra 3.x 使用 drop wizard api as you alluded to. If you can add the Jolokia jar 到您的部署服务器,这将允许您使用简单的 http 请求访问 java jmx 数据。 Jolokia 在 api.

期间公开了来自 java 的所有 mbean

似乎没有任何用于 JMX 的 c++ 库,但是在 Java 中很容易获得 JMX 指标,您所需要的只是标准 jdk。以下代码演示了如何连接到 cassandra 节点并获取 'down' 个节点数。

import java.util.HashMap;
import java.util.Map;

import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;

public class Main {
    public static void main( String[] args ) throws Exception {
        String node = args[0];
        String port = args[1];
        String username = args[2];
        String password = args[3];

        JMXServiceURL url = new JMXServiceURL( "service:jmx:rmi:///jndi/rmi://" + node + ":" + port + "/jmxrmi" );
        String[] credentials = {username, password};

        Map<String, String[]> environment = new HashMap<>();
        environment.put( JMXConnector.CREDENTIALS, credentials );
        JMXConnector jmxConnector = JMXConnectorFactory.connect( url, environment );
        MBeanServerConnection mbsc = jmxConnector.getMBeanServerConnection();//Get metrics bean
        ObjectName oName = new ObjectName( "org.apache.cassandra.net:type=FailureDetector" );//create JMX object name
        int downNodes = (int) mbsc.getAttribute( oName, "DownEndpointCount" ); //get number of unavailable nodes

        System.out.println("Down node count: " + downNodes);
    }
}

您可以在 Oracle documentation

中找到有关 jmx 的更多详细信息

要获取 JMX 对象名称和属性名称,您可以使用 jconsole 工具,它与 jdk 一起提供: