dropwizard metrics是一个非常有用的监控工具
我用他来做远程接口的调用次数,响应时间监控,项目是基于spring的,怎么把metrics集成进来呢
话不多少,直接上代码
1、在pom.xml中添加依赖
<dependency> <groupId>com.ryantenney.metrics</groupId> <artifactId>metrics-spring</artifactId> <version>3.1.3</version> </dependency> <dependency> <groupId>io.dropwizard.metrics</groupId> <artifactId>metrics-servlets</artifactId> <version>3.1.2</version> </dependency>
2、添加一个spring的配置文件,让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.xsd http://www.ryantenney.com/schema/metrics http://www.ryantenney.com/schema/metrics/metrics.xsd "> <!-- Creates a MetricRegistry bean --> <metrics:metric-registry id="metricRegistry" /> <!-- Creates a HealthCheckRegistry bean (Optional) --> <metrics:health-check-registry id="health" /> <!-- Registers BeanPostProcessors with Spring which proxy beans and capture metrics --> <!-- Include this once per context (once in the parent context and in any subcontexts) --> <metrics:annotation-driven metric-registry="metricRegistry" /> <!-- 将registry注入到ServletContextAttribute中 AdminServlet需要使用到这两个属性--> <bean class="org.springframework.web.context.support.ServletContextAttributeExporter"> <property name="attributes"> <map> <entry key="com.codahale.metrics.servlets.MetricsServlet.registry"> <ref bean="metricRegistry" /> </entry> <entry key="com.codahale.metrics.servlets.HealthCheckServlet.registry"> <ref bean="health" /> </entry> </map> </property> </bean> </beans>
3、在web.xml中添加servlet配置,方便通过servlet直接读取统计到的数据
<servlet> <servlet-name>AdminServlet</servlet-name> <servlet-class>com.codahale.metrics.servlets.AdminServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AdminServlet</servlet-name> <url-pattern>/dropwizard/*</url-pattern> </servlet-mapping>
4、在需要监控的方法上面加上类似@Timed的注解
5、打开浏览器,输入localhost:8080/dropwizard就可以看到一个监控菜单了
(网络有点扯淡,上传不了图片了)
6、默认他的方法耗时的单位是秒,执行频率是次/秒,如果需要修改成毫秒,次/分钟,需要在web.xml中添加如下配置
<context-param> <param-name>com.codahale.metrics.servlets.MetricsServlet.durationUnit</param-name> <param-value>MILLISECONDS</param-value> </context-param> <context-param> <param-name>com.codahale.metrics.servlets.MetricsServlet.rateUnit</param-name> <param-value>MINUTES</param-value> </context-param>