As already mentioned, Metrics Spring offers an interesting integration with Spring. If you want to access these metrics from the JSON API, you still need to add a servlet, as described in http://metrics.dropwizard.io/3.1.0/manual/servlets/ .
To use these servlets, you need to add a dependency:
<dependency> <groupId>io.dropwizard.metrics</groupId> <artifactId>metrics-servlets</artifactId> <version>${metrics.version}</version> </dependency>
Then you add the servlet to web.xml:
<servlet> <servlet-name>metrics-admin</servlet-name> <servlet-class>com.codahale.metrics.servlets.AdminServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>metrics-admin</servlet-name> <url-pattern>/metrics/admin/*</url-pattern> </servlet-mapping>
You can also use JavaConfig to configure it.
Register the servlet:
import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletRegistration; import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; import com.codahale.metrics.servlets.AdminServlet; public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootConfigClasses() { return new Class<?>[]{RootConfig.class}; } @Override protected Class<?>[] getServletConfigClasses() { return null; } @Override protected String[] getServletMappings() { return new String[] { "/" }; } @Override public void onStartup(ServletContext servletContext) throws ServletException { super.onStartup(servletContext); ServletRegistration.Dynamic metricsServlet = servletContext.addServlet("metrics", new AdminServlet()); metricsServlet.addMapping("/metrics/admin/*"); } }
And specify the attributes required by the servlet:
import java.util.concurrent.TimeUnit; import javax.servlet.ServletContext; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import com.codahale.metrics.ConsoleReporter; import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.health.HealthCheckRegistry; import com.codahale.metrics.servlets.HealthCheckServlet; import com.codahale.metrics.servlets.MetricsServlet; import com.ryantenney.metrics.spring.config.annotation.EnableMetrics; import com.ryantenney.metrics.spring.config.annotation.MetricsConfigurerAdapter; @Configuration @EnableMetrics public class MetricsConfiguration extends MetricsConfigurerAdapter { @Autowired ServletContext servletContext; @Autowired private HealthCheckRegistry healthCheckRegistry; @Override public void configureReporters(MetricRegistry metricRegistry) { registerReporter(ConsoleReporter .forRegistry(metricRegistry) .build()) .start(1, TimeUnit.MINUTES); servletContext.setAttribute(MetricsServlet.METRICS_REGISTRY, metricRegistry); servletContext.setAttribute(HealthCheckServlet.HEALTH_CHECK_REGISTRY, healthCheckRegistry); } }
source share