metrics实践 (metrics-spring)

这里主要介绍metrics与spring集成的使用方式。

 

1  添加maven依赖

<dependency>
    <groupId>com.ryantenney.metrics</groupId>
    <artifactId>metrics-spring</artifactId>
    <version>3.1.2</version>
</dependency>
<dependency>
    <groupId>io.dropwizard.metrics</groupId>
    <artifactId>metrics-jvm</artifactId>
    <version>3.1.2</version>
</dependency>

 

2 spring配置文件

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:metrics="http://www.ryantenney.com/schema/metrics"
       xsi:schemaLocation="
           http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
           http://www.ryantenney.com/schema/metrics
           http://www.ryantenney.com/schema/metrics/metrics-3.0.xsd">

    <!-- Registry 声明 -->
    <metrics:metric-registry id="metrics" />

    <!-- 使用注解 -->
    <metrics:annotation-driven metric-registry="metrics" />

    <!-- 采用log的方式输出metrics -->
    <metrics:reporter type="slf4j" metric-registry="metrics" period="5m" />

    <!-- 通过metrics监控jvm状态-->
    <metrics:register metric-registry="metrics">
        <bean metrics:name="jvm.gc" class="com.codahale.metrics.jvm.GarbageCollectorMetricSet" />
        <bean metrics:name="jvm.memory" class="com.codahale.metrics.jvm.MemoryUsageGaugeSet" />
        <bean metrics:name="jvm.thread-states" class="com.codahale.metrics.jvm.ThreadStatesGaugeSet" />
        <bean metrics:name="jvm.fd.usage" class="com.codahale.metrics.jvm.FileDescriptorRatioGauge" />
    </metrics:register>

    <!-- Beans and other Spring config -->

</beans>

 

3  配置log

    查看Slf4jReporter的Builder方法发现,它是通过"metrics"这个字符串获取的Logger。源码如下

    

    

     因此需要在logback文件中添加一个名为”metrics"的logger

     

    <appender name="metricsFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>/data/logs/pname/pname_metrics_%d{yyyyMMdd}.log</fileNamePattern>
        </rollingPolicy>
        <encoder charset="UTF-8">
            <pattern>%d{HH:mm:ss} %-5p %c:%L - %m%n</pattern>
        </encoder>
    </appender>

    <logger name="metrics" level="INFO" additivity="false">
         <appender-ref ref="metricsFILE" />
    </logger>

 

4  对需要监控的方法,使用如下注解@Timed@Metered,@ExceptionMetered 。。等等(具体含义,参考官方文档)

    比如,我要监控bar()方法的每秒请求量,方法平均执行时间,方法调用次数等,就可以使用@Timed注解。

     @Timed
     public void bar() { /**/ }

   需要注意的是,由于spring AOP的限制,这些注解只有用于 public方法中。

 

 

5  效果如下所示,每个方法的执行时间,每秒请求量,jvm状态等等数据,一目了然。也可以将这些metercs数据存入时间序列数据库(opentsdb,influxdb等)

 

posted @ 2015-10-10 09:48  王白告  阅读(3029)  评论(0编辑  收藏  举报