You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:Telegraf的Jolokia插件监控Java应用JMX属性遇多类错误

解决Telegraf Jolokia插件监控Java应用JMX的问题

我们一步步拆解你遇到的核心问题,逐个击破:

1. 启动应用时JavaAgent加载失败的问题

你遇到的启动错误:

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

问题根源:你写错了Jolokia Agent的Jar包名称!
从你的CLASSPATH配置能看到,实际Jar包是jolokia-core-1.3.7.jar,但你在JOLOKIA_OPTS里误写成了jolokia-core-java-1.3.7.jar(多了-java后缀),导致JVM找不到正确的Jar文件。

修复步骤:

  • 修改JOLOKIA_OPTS的Jar文件名,去掉多余的-java:
    JOLOKIA_OPTS=-javaagent:$LIB_PATH/jolokia-core-1.3.7.jar=port=8778,host=0.0.0.0
    
  • 额外确认:$LIB_PATH必须是正确的绝对路径,或者相对于应用启动目录的有效相对路径。比如如果应用在/opt/wr-core/bin目录启动,../lib对应/opt/wr-core/lib,要确保这个目录下确实存在jolokia-core-1.3.7.jar。

2. 为什么用JMX端口1998连接Telegraf会报错?

你看到的JSON解码错误:

Error decoding JSON response: invalid character '\x00' looking for beginning of value

问题根源:Telegraf的Jolokia插件是基于HTTP协议与Jolokia Agent通信的,而1998是你的应用的JMX RMI端口(二进制协议),两者完全不兼容。Jolokia插件无法解析RMI端口返回的二进制数据,自然会出现JSON解码失败的错误。

结论:永远不要把Telegraf Jolokia插件的port配置成JMX的RMI端口,必须使用Jolokia Agent提供的HTTP端口(也就是你配置的8778)。

3. 配置Telegraf与Jolokia Agent的正确流程

第一步:确保Jolokia Agent启动成功

修复JavaAgent配置后,启动应用,用curl测试Jolokia的HTTP接口:

curl http://192.168.100.175:8778/jolokia/

如果返回类似下面的JSON响应,说明Agent启动正常:

{
  "request":{
    "type":"version"
  },
  "value":{
    "agent":"1.3.7",
    "protocol":"7.2",
    "config":{},
    "info":{}
  },
  "timestamp":1718000000,
  "status":200
}

再测试能否读取目标MBean属性:

curl http://192.168.100.175:8778/jolokia/read/wr-core:type=monitor,name=execution/MessageSendSuccessCount

如果返回包含MessageSendSuccessCount数值的JSON,说明MBean能被Jolokia正确读取。

第二步:修正Telegraf配置

修改/etc/telegraf/telegraf.conf中的Jolokia配置,确保端口是8778:

[[inputs.jolokia]]
  context = "/jolokia/"
  [[inputs.jolokia.servers]]
    name = "wr-core"
    host = "192.168.100.175"
    port = "8778"  # 这里改成Jolokia Agent的HTTP端口,不是JMX的1998
  [[inputs.jolokia.metrics]]
    name = "send_success"
    mbean = "wr-core:type=monitor,name=execution"
    attribute = "MessageSendSuccessCount"

第三步:重启Telegraf并验证

重启Telegraf服务:

sudo systemctl restart telegraf

查看Telegraf日志,如果没有报错,说明配置成功。你也可以用测试命令快速验证:

telegraf --test --config /etc/telegraf/telegraf.conf

额外建议

  • 移除pom.xml中的jolokia-client-java和jolokia-core依赖:因为你用的是JavaAgent模式,不需要在应用代码中引入这些依赖,避免潜在的版本冲突。
  • 如果Jolokia Agent启动后仍无法访问8778端口,检查服务器防火墙是否开放了该端口,或者确认应用是否绑定了正确的IP(你配置了host=0.0.0.0,理论上没问题)。

内容的提问来源于stack exchange,提问作者Zeinab Abbasimazar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:36:30