zoukankan      html  css  js  c++  java
  • dropwizard metrics

    之前在healthcheck中介绍了怎样通过metrics lib往系统中增加一些简单的健康侦測。如今讲讲dropwizard metrics更重要的部分。记录系统的度量信息。

    dropwizard提供了多种度量方式:最简单记数counter,复杂点的实用于计算时间分布的histogram,用于计算速率的meter,以及同一时候有histogram和meter功能的timer。有兴趣能够去看看实现细节,类非常少,非常easy读懂。
    Metrics的报告方式和healthcheck非常相似。库自生提供的各种报告渠道。

    也能够非常easy自己扩展。
    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的功能包能够參考使用手冊

  • 相关阅读:
    一种开源的分布式消息系统Nats
    资产盘点:除了金钱,一个人还有哪些资产?
    博客首页规则改版公告
    <html>
    欢迎使用CSDN-markdown编辑器
    java 小程序查看器 启动:未初始化小程序 解决方法
    Hadoop2.6.0版本号MapReudce演示样例之WordCount(一)
    深入学习IOZone【转】
    i.MX6UL -- PWM用户空间使用方法【转】
    linux PWM蜂鸣器移植以及驱动程序分析【转】
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/7360415.html
Copyright © 2011-2022 走看看