问题描述
使用 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指标值。
参考资料
当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!