Munin을 사용하여 Java를 통해 실행되는 Elasticsearch에서 사용하는 JVM의 상태를 모니터링하고 싶습니다(아래 출력 ps
).
elastic+ 1083 1 3 09:29 ? 00:13:23 /usr/bin/java -Xms8g -Xmx8g -Djava.awt.headless=true -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+HeapDumpOnOutOfMemoryError -XX:+DisableExplicitGC -Dfile.encoding=UTF-8 -Djna.nosys=true -Des.path.home=/usr/share/elasticsearch -cp /usr/share/elasticsearch/lib/elasticsearch-2.1.0.jar:/usr/share/elasticsearch/lib/* org.elasticsearch.bootstrap.Elasticsearch start -d -p /var/run/elasticsearch/elasticsearch.pid --default.path.home=/usr/share/elasticsearch --default.path.logs=/var/log/elasticsearch --default.path.data=/var/lib/elasticsearch --default.path.conf=/etc/elasticsearch
가지다여러 Java용 Munin 플러그인;하지만,
이를 위해서는
jstat__*
JSVC를 통해 프로그램을 실행해야 하며, 내가 아는 한 소스 코드를 수정해야 합니다.요구사항: jsvc가 제공하는 환경에서 Java 프로그램을 실행해야 합니다. http://jakarta.apache.org/commons/daemon/ -pidfile 옵션을 사용하여 pid 파일을 지정하면 Java 프로그램을 실행할 수 있습니다.
이를 위해서는
jmx_*
JMX 원격 인터페이스를 노출하기 위한 Java 프로세스가 필요하며, 이는 특정 매개변수를 Java 바이너리에 전달하여 수행됩니다.Java 프로세스를 모니터링하려면 JMX 원격 인터페이스를 노출해야 합니다. Java 1.5의 경우 매개변수를 추가하여 이를 수행할 수 있습니다.
-Dcom.sun.management.jmxremote.port=<PORT> -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
사실은,Munin용 기존 Elasticsearch 플러그인JVM을 완전히 건너뛰고 포트 9200에서 JSON을 통해 데이터를 가져옵니다.
그렇다면 JVM을 통해 이를 어떻게 달성할 수 있을까요? 이것이 가능하지 않다면 Elasticsearch를 모니터링하기 위한 다른 무료 솔루션에도 관심이 있습니다.
답변1
Elasticsearch가 아닌 JVM 자체 통계에만 관심이 있는 경우 JVM에 내장된 SNMP 에이전트를 사용해 보십시오.OpenNMS의 튜토리얼도움이 될 것입니다.
JMX는 로컬 모드에서도 실행될 수 있습니다. 클라이언트는 JVM과 동일한 사용자 계정으로 실행되어야 합니다. jmxterm
이런 일을 할 수 있는 능력이 있어(그게 하는 일이야), 그러나 분명히 Munin의 jmxquery 도구는 그렇지 않습니다.