我正在尝试使用 App Insights 实现 JMX 指标跟踪。它是一个 Spring Boot、Java 应用程序。这是我的 applicationinsights.json 的样子:
{
"connectionString":"SOME_URL",
"role":{
"name":"A_NAME",
"instance":"AN_INSTANCE"
},
"sampling":{
"requestsPerSecond":200
},
"jmxMetrics":[
{
"name":"TEMP - GC Thread Count",
"objectName":"java.lang:type=GarbageCollector,name=PS MarkSweep",
"attribute":"LastGcInfo.GcThreadCount"
},
{
"name":"TEMP - GC Collection Count",
"objectName":"java.lang:type=GarbageCollector,name=PS MarkSweep",
"attribute":"CollectionCount"
},
{
"name":"TEMP - Thread Count",
"objectName":"java.lang:type=Threading",
"attribute":"ThreadCount"
}
],
"instrumentation":{
"logging":{
"level":"INFO"
},
"micrometer":{
"enabled":false
},
"jdbc":{
"masking":{
"enabled":true
}
},
"kafka":{
"enabled":true
}
},
"heartbeat":{
"intervalSeconds":60
}
}
但是当我启动我的应用程序时,我收到此错误。
2023-10-05 12:59:18.075Z ERROR c.m.a.a.i.p.AbstractJmxPerformanceCounter - Error while fetching JMX data: 'java.lang.IllegalArgumentException: Cannot find object name 'java.lang:type=GarbageCollector,name=PS MarkSweep''
我正在从教程中尝试这个。所以我希望它能起作用。但不知何故,JMX 设置抛出了错误。我猜这可能是语法错误。
任何指示都会有帮助。
我在源代码中尝试了您的 applicationinsights.json,我能够运行 java 代码,该代码触发连接到我的 Azure Web 应用程序的 Application Insights 中的日志,如下所示:-
代码:
Application.java:
import org.springframework.context.annotation.Bean;
@Bean
public MyJmxBean myJmxBean() {
return new MyJmxBean();
}
}
MyJmxBean.java:
import org.springframework.jmx.export.annotation.ManagedAttribute;
import org.springframework.jmx.export.annotation.ManagedResource;
@ManagedResource(objectName = "com.demo:name=MyJmxBean")
public class MyJmxBean {
private int counter = 0;
@ManagedAttribute
public int getCounter() {
return counter;
}
public void incrementCounter() {
counter++;
}
}
HomeController.java:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HomeController {
@GetMapping("/")
public String home() {
return "Welcome to My Spring Boot Application!";
}
}
application.properties:
spring.application.name=my-spring-boot-app
server.port=8080
spring.application-insights.instrumentation-key=<appinsights_instrumentationKey>
spring.jmx.enabled=true
applicationinsights.json:
{
"connectionString":"<connec_string>",
"role":{
"name":"my-spring-boot-app",
"instance":"1"
},
"sampling":{
"requestsPerSecond":200
},
"jmxMetrics":[
{
"name":"TEMP - GC Thread Count",
"objectName":"java.lang:type=GarbageCollector,name=PS MarkSweep",
"attribute":"LastGcInfo.GcThreadCount"
},
{
"name":"TEMP - GC Collection Count",
"objectName":"java.lang:type=GarbageCollector,name=PS MarkSweep",
"attribute":"CollectionCount"
},
{
"name":"TEMP - Thread Count",
"objectName":"java.lang:type=Threading",
"attribute":"ThreadCount"
}
],
"instrumentation":{
"logging":{
"level":"INFO"
},
"micrometer":{
"enabled":false
},
"jdbc":{
"masking":{
"enabled":true
}
},
"kafka":{
"enabled":true
}
},
"heartbeat":{
"intervalSeconds":60
}
}
输出:
运行成功如下:
输出网址:
Azure 门户上的应用程序见解: