使用 Spring 执行器访问内部 MBean JMX 属性

Accessing internal MBean JMX Attributes with Spring Actuator

我正在通过其 JMX 接口使用 Spring Actuator 来为我们的监控团队提供指标。

我们的监控团队正在使用可以跟踪特定 MBean 属性的工具。使用 "standard" JMX,就像 Tomcat 公开的那样,这工作正常。然而,在 Spring Actuator 中,公开的 MBean 只是 SENSITIVE、ENDPOINT 和 DATA。 DATA 包含一个 json,其中包含所有属性(类似于您将在 http 界面中看到的内容)。

有什么方法可以将特定信息(例如,mem 使用情况、threads.active 等)公开为它们自己的 MBean 属性,而不是将所有属性显示为一个大的 JSON?

Spring 的 JMX 解决方案在默认情况下对许多生产监控工具来说不是用户友好的。

我尝试查看 jolokia,但我无法从文档中了解该框架是否能满足我的需求。

谢谢!

请使用以下代码在 jconsole 的 MBEAN 选项卡中查看 METRIX 节点,其中显示了有关 JVM 内存、线程和 GC 状态的完整详细信息。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.codahale.metrics.JmxReporter;
import com.codahale.metrics.MetricRegistry;
import com.codahale.metrics.jvm.GarbageCollectorMetricSet;
import com.codahale.metrics.jvm.MemoryUsageGaugeSet;
import com.codahale.metrics.jvm.ThreadStatesGaugeSet;

@Configuration
public class Metrix {

    @Bean
    public JmxReporter jmxReporter() {
        JmxReporter reporter = JmxReporter.forRegistry(getMetricRegistry()).build();
        reporter.start();
        return reporter;
    }

    public MetricRegistry getMetricRegistry() {
        MetricRegistry metricRegistry = new MetricRegistry();
        metricRegistry.register("jvm-thread-state", new ThreadStatesGaugeSet());
        metricRegistry.register("jvm-mem", new MemoryUsageGaugeSet());
        metricRegistry.register("jvm-gc", new GarbageCollectorMetricSet());
        return metricRegistry;
    }
}

Use following libraries:-
<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>io.dropwizard.metrics</groupId>
    <artifactId>metrics-core</artifactId>
    <version>3.1.2</version>
</dependency>
<dependency>
    <groupId>io.dropwizard.metrics</groupId>
    <artifactId>metrics-jvm</artifactId>
    <version>3.1.2</version>
</dependency>