CassandraのJMX
何やら「CassandraのJMXに接続すればノードとかキースペースとかの情報は取れるよ」っていうのを言われたのでやってみた。Cassandraを起動している状態だと、デフォルトでは7199(cassandra-env.shで変更可能)でJMXポートが開放されている。jconsoleで見ると
という風になっているので、このStorageServiceMBeanなのを取得すれば云々出来る模様
import javax.management.JMX;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
import org.apache.cassandra.service.StorageServiceMBean;
public class Test {
public static void main(String[] args) throws Exception {
JMXConnector connector = JMXConnectorFactory.connect(
new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:7199/jmxrmi")
);
MBeanServerConnection conn = connector.getMBeanServerConnection();
StorageServiceMBean ssmb = JMX.newMBeanProxy(
conn,
new ObjectName("org.apache.cassandra.db:type=StorageService"),
StorageServiceMBean.class
);
for (String node : ssmb.getLiveNodes()) {
System.out.println("node: " + node);
}
for (String keyspace : ssmb.getKeyspaces()) {
System.out.println("keyspace: " + keyspace);
}
}
}