dropwizard使用之metrics

应用级监控

1. Maven

引入依赖。

<!-- 依赖于metrics-core, metrics-healthchecks, metrics-json, metrics-jvm,jackson; 所以只需要引入这一个即可 -->
<dependency>
    <groupId>io.dropwizard.metrics</groupId>
    <artifactId>metrics-servlets</artifactId>
    <!-- 这个版本是SpringBoot1.5.7推荐的 -->
    <version>3.1.5</version>
</dependency>

2. 自定义类

健康检查HealthCheck

public class CustomHealthCheckContextListener extends com.codahale.metrics.servlets.HealthCheckServlet.ContextListener {

    @Override
    protected HealthCheckRegistry getHealthCheckRegistry() {
        HealthCheckRegistry healthCheckRegistry = MetricsObjectFactory.getHealthCheckRegistry();

        register(healthCheckRegistry);

        return healthCheckRegistry;
    }

    private void register(HealthCheckRegistry healthCheckRegistry){
        // A health check which returns healthy if no threads are deadlocked.
        healthCheckRegistry.register("thread-deadlock", new ThreadDeadlockHealthCheck());

    }

}

Metrics

public class CustomMetricsContextListener extends com.codahale.metrics.servlets.MetricsServlet.ContextListener {

    @Override
    protected MetricRegistry getMetricRegistry() {

        MetricRegistry metricRegistry = MetricsObjectFactory.getMetricRegistry();

        JvmMetrics.metrics(metricRegistry);

        return metricRegistry;
    }

}

public class JvmMetrics {

    // 通过集成好的AdminServlet访问
    public static void metrics(MetricRegistry metricRegistry) {
        metricRegistry.register("jvm.gc", new GarbageCollectorMetricSet());
        metricRegistry.register("jvm.memory", new MemoryUsageGaugeSet());
        metricRegistry.register("jvm.thread-states", new ThreadStatesGaugeSet());
        metricRegistry.register("jvm.fd.usage", new GarbageCollectorMetricSet());

        metricRegistry.register("jvm.classloader", new ClassLoadingGaugeSet());
        //A gauge for the ratio of used to total file descriptors.
        metricRegistry.register("jvm.fileDescriptorRatio", new FileDescriptorRatioGauge());             
    }
}

3. web.xml

在web.xml中配置dropwizard内置的AdminServlet

  <servlet>
    <servlet-name>metricsAdminServlet</servlet-name>
    <servlet-class>com.codahale.metrics.servlets.AdminServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>metricsAdminServlet</servlet-name>
    <url-pattern>/metrics/*</url-pattern>
  </servlet-mapping>        

<listener>
    <listener-class>com.lq.learning.struts.metrics.servlet.CustomHealthCheckContextListener</listener-class>
</listener>  

<listener>
    <listener-class>com.lq.learning.struts.metrics.servlet.CustomMetricsContextListener</listener-class>
</listener>

4. structs.xml

这一步算是写本篇文章的主因了。按照struts2的底层实现原理,请求在到达dropwizard内置的AdminServlet之前,必然要先经过struts2的核心Filter – StrutsPrepareAndExecuteFilter。而经过翻找源码就会发现struts2提供的配置属性struts.action.extension(这个字符串被定义在org.apache.struts2.StrutsConstants类中,而其被解析则是在InitOperations.buildExcludedPatternsList方法中)。

<constant name="struts.action.extension" value="/metrics/*" />

5. 访问

http://localhost:9999/projectName/metrics
界面内容

  1. Office Site
  2. dropwizard metrics - healthchecks

猜你喜欢

转载自blog.csdn.net/lqzkcx3/article/details/80287702