Я использую Cassandra и его драйвер C ++ для написания API для вставки и извлечения данных в течение некоторого времени. Однако теперь, когда я создал свой кластер, я хочу разработать инструменты мониторинга для своего кластера.
Я хочу создать приложение (предпочтительно на C ++, и я не хочу использовать стороннее приложение), которое будет хранить специфические атрибуты управления кластером, такие как использование памяти каждого узла в кластере, задержка каждой операции, пространство, занимаемое каждым таблица на каждом узле и т. д. Я читал о «Метрики в Кассандре (https://cassandra.apache.org/doc/latest/operating/metrics.html) но я не знаю, как именно их использовать при создании моего приложения, так как раньше я не работал на Java (извините за это!).
Может ли такое приложение быть построено с использованием C ++? Если в C ++ много работы, тогда будет очень полезно, если вы сможете поделиться некоторым кодом Java, где эти метрики Cassandra использовались для мониторинга кластера Cassandra.
ОС: RHEL
Кассандра версия: 3.11.2
Кажется, что нет никаких библиотек c ++ для JMX, но в Java довольно просто получить метрики JMX, все, что вам нужно, это стандартный jdk. Следующий код демонстрирует, как подключиться к узлу Кассандры и получить счетчик узлов «вниз».
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 вы можете найти в Документация Oracle
Для получения имен объектов JMX и имен атрибутов вы можете использовать инструмент jconsole, который поставляется вместе с jdk:
Кассандра 3.x использует Мастер падения API, как вы намекали. Если вы можете добавить Jolokia jars на ваш сервер (ы) развертывания, это позволит вам получить доступ к данным java jmx с помощью простого http-запроса. Джолокия выставляет всех бобов из Явы в усадьбе для отдыха.