问题描述
使用 Application Insights Java 3.x 收集 Java 管理扩展 (JMX) 指标, 根据文档在 applicationinsights.json 文件中添加 "jmxMetrics"
部分,并添加如下内容:
"jmxMetrics": [{"name": "Demo - G1 Collection Count Young","objectName": "java.lang:name=G1 Young Generation,type=GarbageCollector","attribute": "CollectionCount"},{"name": "Demo - G1 Collection Count Old","objectName": "java.lang:name=G1 Old Generation,type=GarbageCollector","attribute": "CollectionCount"},{"name": "Demo - Thread Count","objectName": "java.lang:type=Threading","attribute": "ThreadCount"}]
但结果无法收集到数据,程序执行并没有报错。这是什么情况呢?
问题解答
正如在文档中提到的,必须要配置正确的Name 和 Attribute 值才能收集到JMX指标。而当前遇到的问题是由于不同java版本中的相关的attirbute名称不同导致。
如果是收集 GC 相关的JMX指标可参考如下配置:
"jmxMetrics": [{"name": "Demo - G1 young gen","objectName": "java.lang:name=G1 Young Generation,type=GarbageCollector","attribute": "CollectionTime"},{"name": "Demo - G1 old gen","objectName": "java.lang:name=G1 Old Generation,type=GarbageCollector","attribute": "CollectionTime"} ]
而如果想知道当前Java版本中的java.lang 的参数名和属性值,可以通过下文:
下载 JMXTerm 然后参考文章( https://github.com/microsoft/ApplicationInsights-Java/wiki/Troubleshoot-JMX-metrics )来查看当前环境中的JMX指标值。
参考资料
配置 JMX 指标:https://learn.microsoft.com/zh-cn/azure/azure-monitor/app/java-jmx-metrics-configuration#where-do-i-find-the-jmx-metrics-in-application-insights