這里主要介紹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等)

