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