CassandraのJMX

2012-09-18T00:00:00+00:00 Cassandra Java

何やら「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);
        }
    }
}

Hectorを使ってみる (1) jqplot