我一直在使用Cassandra及其C ++驱动程序编写API来插入和获取数据一段时间。但是现在我已经创建了我的集群,我想为我的集群开发监控工具。
我想构建一个应用程序(最好是在C ++中,我不想使用第三方应用程序),它将存储集群管理特定的属性,如集群中每个节点的内存利用率,每个操作的延迟,每个节点上每个表占用的空间等。我在Cassandra(https://cassandra.apache.org/doc/latest/operating/metrics.html)中读到了关于度量标准的信息,但我不知道如何使用它们来构建我的应用程序,因为我以前没有在Java上工作过(请原谅我!)。 这样的应用程序可以使用C ++构建吗?如果它在C ++中有很多工作,那么如果你可以共享一些使用这些Cassandra Metrics来监控Cassandra集群的Java代码,那将是非常有益的。
操作系统:RHEL Cassandra版本:3.11.2
答案 0 :(得分:1)
Cassandra 3.x使用你所提到的drop wizard api。如果您可以将Jolokia jar添加到部署服务器,这将允许您使用简单的http请求访问java jmx数据。 Jolokia在休息庄园中暴露了java中的所有mbeans。
答案 1 :(得分:1)
看来,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);
}
}
中找到有关jmx的更多详细信息
要获取JMX对象名称和属性名称,可以使用jconsole工具,它与jdk一起提供: