我有一个JAVA应用程序,我希望使用telegraf工具来监视它的JMX属性。
该工具提供了jolikia插件来监视JMX属性。我在我的应用程序的pom.xml文件中添加了有关Jolokia文件的Maven部分的依赖项
<dependency>
<groupId>org.jolokia</groupId>
<artifactId>jolokia-core</artifactId>
<version>1.3.7</version>
</dependency>
<dependency>
<groupId>org.jolokia</groupId>
<artifactId>jolokia-client-java</artifactId>
<version>1.3.7</version>
</dependency>这是我的/etc/telegraf/telegraf.conf文件:
[[inputs.jolokia]]
context = "/jolokia/"
[[inputs.jolokia.servers]]
name = "wr-core"
host = "192.168.100.175"
port = "1998"
[[inputs.jolokia.metrics]]
name = "send_success"
mbean = "wr-core:type=monitor,name=execution"
attribute = "MessageSendSuccessCount"应用程序位于提供的IP/端口中(我可以使用jconsole连接到它)。应用程序有一个监视部分,其对象名(如jconsole中所示)为wr-core:type=monitor,name=execution,并具有属性MessageSendSuccessCount。但是,当我启动telegraf服务时,会发生以下错误:
Jan 14 14:30:32 ZiZi telegraf[17258]: 2018-01-14T11:00:32Z E! Error in plugin [inputs.jolokia]: error performing request: Error decoding JSON response: invalid character '\x00' looking for beginning of value:注意,1998是我的应用程序的jmx端口。我还尝试使用8778,它是jolokia-agent端口;got:
Jan 14 14:40:03 ZiZi telegraf[9150]: 2018-01-14T11:10:03Z E! Error in plugin [inputs.jolokia]: error performing request: Post http://192.168.100.175:8778/jolokia/: dial tcp 192.168.100.175:8778: getsockopt: connection refused编辑1:
我检查了我的CLASSPATH,jolokia-client和jolokia-core都列出了:../lib/jolokia-client-java-1.3.7.jar:../lib/jolokia-core-1.3.7.jar。
编辑2:
我在我的应用程序的执行文件中放了以下几行:
JOLOKIA_OPTS=-javaagent:$LIB_PATH/jolokia-core-java-1.3.7.jar=port=8778,host=0.0.0.0
JAVA_OPTS="-mx4096M $JAVA_OPTS $JACOCO_OPTS $JOLOKIA_OPTS"但是,当我运行该文件时,我会得到这个错误(即使../lib/jolokia-core-java-1.3.7.jar已在CLASSPATH中列出):
Error opening zip file or JAR manifest missing : ../lib/jolokia-core-java-1.3.7.jar
Error occurred during initialization of VM
agent library failed to init: instrument发布于 2018-01-15 09:03:17
找到了解决办法。
我跳过了maven解决方案,尝试了javaagent方法,但是我以前误解了javaagent的用法;我应该讨论jolokia jvm代理 (这帮助了一下):
JOLOKIA_OPTS=-javaagent:/root/jolokia-jvm-1.3.7-agent.jar=port=8778,host=0.0.0.0
JAVA_OPTS="-mx4096M $JAVA_OPTS $JACOCO_OPTS $JOLOKIA_OPTS"现在,我的应用程序从这个日志开始(成功):
I> No access restrictor found, access to any MBean is allowed
Jolokia: Agent started with URL http://192.168.100.175:8778/jolokia/在另一边,telegraf控制台中的jolokia不再出现错误。
所有的观察都暗示着jolokia库已经启动并成功运行。
我还发现jolokia jmx文档可以将它作为项目中的依赖项使用;但是由于我不是javaagent专家(我正在测试应用程序),所以我现在更喜欢使用javaagent方法,并将其留给以后的研究/经验。顺便说一句,这可能对其他人有帮助。
编辑1:
我已经找到并部署了使用jolokia jvm agent的弹簧支座。
在spring XML文件中配置它,我现在可以让jolokia jvm agent在我的应用程序启动时开始监听。
https://stackoverflow.com/questions/48248973
复制相似问题