• 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的功能包能够參考使用手冊

  • 相关阅读:
    Linux 学习 step by step (2)
    公共建筑能耗监测平台的GPRS通讯服务器的开发方法分享
    幸福框架:可扩展的、动态的、万能的 编号生成器
    C++ Data Member内存布局
    .NET程序集强命名删除与再签名技术 源代码剖析
    hdu 2191(多重背包)
    五种情况下会刷新控件状态(刷新所有子FWinControls的显示)——从DFM读取数据时、新增加子控件时、重新创建当前控件的句柄时、设置父控件时、显示状态被改变时
    终于懂了:Delphi消息的Result域出现的原因——要代替回调函数的返回值!(MakeObjectInstance不会帮助处理(接收)消息回调函数的返回值)
    Firemonkey实现Mac OS程序中内嵌浏览器的功能(自己动手翻译,调用苹果提供的webkit框架)
    感悟:市场经济看得就是主观能动性,有则富贵可及,无则无限趋于零
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/7360415.html
Copyright © 2020-2023  润新知