dropwizard metrics - 基本使用介绍

本文介绍了Dropwizard Metrics的基本使用,包括counter、histogram、meter和timer等度量方式,以及如何将度量信息与healthcheck结合。通过metrics-servlet,可以在Web请求中展示度量和健康检查信息。示例展示了如何在Spring Web应用中创建timer,并在Web.xml配置AdminServlet以获取度量数据。强调了理解系统度量需求的重要性超过技术实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前在healthcheck中介绍了如何通过metrics lib往系统中加入一些简单的健康侦测,现在讲讲dropwizard metrics更重要的部分,记录系统的度量信息。dropwizard提供了多种度量方式:最简单记数counter,复杂点的有用于计算时间分布的histogram,用于计算速率的meter,以及同时有histogram和meter功能的timer。有兴趣可以去看看实现细节,类很少,很容易读懂。
Metrics的报告方式和healthcheck非常类似,库自生提供的各种报告渠道。也可以很容易自己扩展。
Metrics提供了各种包,可以帮助简化开发。其中metrics-servlet可以直接把metrics和healthcheck的信息在web request里面展示出来。
接下来给个使用的例子,对Web应用的请求进行度量,然后通过AdminServlet获取metrics和healthcheck信息。

  • 在maven中导入需要的包
 <dependency>
            <groupId>io.dropwizard.metrics</groupId>
            <artifactId>metrics-core</artifactId>
            <version>${metrics.version}</version>
        </dependency>
        <dependency>
            <groupId>io.dropwizard.metrics</groupId>
            <artifactId>metrics-servlets</artifactId>
            <version>${metrics.version}</version>
        </dependency>
        <dependency>
            <groupId>io.dropwizard.metrics</groupId>
            <artifactId>metrics-json</artifactId>
            <version>${metrics.version}</version>
        </dependency>
        <dependency>
            <groupId>io.dropwizard.metrics</groupId>
            <artifactId>metrics-healthchecks</artifactId>
            <version>${metrics.version}</version>
        </dependency>
  • 创建用来注册metrics和healtcheck的servlet
public class HealthCheckServletContextListener extends HealthCheckServlet.ContextListener{

    public static final HealthCheckRegistry HEALTH_CHECK_REGISTRY = new HealthCheckRegistry();

    @Override
    protected HealthCheckRegistry getHealthCheckRegistry() {
        return HEALTH_CHECK_REGISTRY;
    }
}
public class MetricsServletContextListener extends MetricsServlet.ContextListener {

    public static final MetricRegistry METRIC_REGISTRY = new MetricRegistry();

    @Override
    protected MetricRegistry getMetricRegistry() {
        return METRIC_REGISTRY;
    }


}
  • 在Spring Web action中创建timer,加入到MetricsServletContextListener的MetricRegistery中,对每个方法开始调用time得到context,结束执行context.stop
    private final Timer executions = MetricsServletContextListener.METRIC_REGISTRY.timer(MetricRegistry.name(SignupController.class, "executions"));

    @Autowired
    private UserService userService;

    @RequestMapping(method = RequestMethod.POST)
    public String register(@Valid User user, BindingResult bindingResult, RedirectAttributes redirectAttributes) {
        final Timer.Context context = executions.time();
        if (bindingResult.hasErrors()) {
            redirectAttributes.addFlashAttribute("user", user);
            redirectAttributes.addFlashAttribute(BindingResult.MODEL_KEY_PREFIX + "user", bindingResult);
            context.stop();
            return "redirect:/";
        }
        try {
            userService.registerUser(user);
            redirectAttributes.addFlashAttribute("username", user.getUsername());
            return "redirect:/";
        } catch (UserExistsException e) {
            return "redirect:/";
        } finally {
            context.stop();
        }
    }
  • 在Web.xml中配置AdminServlet访问路径,配置2个listener
    <listener>
        <listener-class>com.cloud.demo.HealthCheckServletContextListener </listener-class>
</listener>
<listener>
        <listener-class>com.cloud.demo.MetricsServletContextListener</listener-class>
</listener>
    <servlet>
        <servlet-name>metrics</servlet-name>
        <servlet-class>com.codahale.metrics.servlets.AdminServlet
        </servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>metrics</servlet-name>
        <url-pattern>/metrics/*</url-pattern>
    </servlet-mapping>

这样就可以通过/metrics/healthcheck或者/metrics/metrics查看系统度量数据。

记住:系统度量最重要的是要分析系统中需要什么样的度量信息,技术实现反而不是那么重要。
更多dropwizard的功能包可以参考使用手册

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值