Java

是否可以通過 Munin 監控 Elasticsearch 的 JVM 使用情況?

  • February 14, 2016

我想使用 Munin 來監控 Elasticsearch 使用的 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執行程序,據我所知需要修改原始碼:

要求:您需要在 http://jakarta.apache.org/commons/daemon/提供的 jsvc 下執行您的 Java 程序, 這使您可以使用帶有 -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 的其他免費解決方案感興趣。

如果您只對 JVM 自己的統計資訊(而不是 Elasticsearch 的)感興趣,請嘗試使用 JVM 的內置 SNMP 代理——OpenNMS 的教程應該會有所幫助。

JMX 也可以在本地模式下執行;客戶端必須在與 JVM 相同的使用者帳戶下執行。 jmxterm能夠做到這一點(這就是它的作用),但顯然,Munin 的 jmxquery 工具不是。

引用自:https://unix.stackexchange.com/questions/261294