我想使用 Munin 来监视 Elasticsearch 使用的 JVM 的状态,该 JVM 通过 Java 运行(输出如下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_*
要求 Java 进程公开 JMX 远程接口,这是通过将特定参数传递给 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
如果您只对 JVM 自己的统计数据(而不是 Elasticsearch 的)感兴趣,请尝试使用 JVM 的内置 SNMP 代理 --来自 OpenNMS 的教程应该有帮助。
JMX也可以在本地模式下运行;客户端必须在与 JVM 相同的用户帐户下运行。 jmxterm
有能力做到这一点(这就是它的作用),但显然,Munin 的 jmxquery 工具不是。