获取 JMX 数据时出错(App Insights)

问题描述 投票:0回答:1

我正在尝试使用 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 设置抛出了错误。我猜这可能是语法错误。

任何指示都会有帮助。

java spring-boot azure azure-application-insights jmx
1个回答
0
投票

我在源代码中尝试了您的 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
    }
  }

输出

运行成功如下:

enter image description here

输出网址

enter image description here

Azure 门户上的应用程序见解:

enter image description here

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.