内容简介:最近在写一个小应用,有些计量方式觉得可以参考一下Metrics,所以打算花两天的时间学习一下这个工具。Metrics是一个java监控计量工具包。在Spark、Hadoop、Spring等软件中都可以看到它的影子。Metrics提供了多种指标工具,如Gauge、Counter、Metrer、Timer、Histogram以及HealthCheck等。
最近在写一个小应用,有些计量方式觉得可以参考一下Metrics,所以打算花两天的时间学习一下这个工具。
Overview
Metrics是一个 java 监控计量 工具 包。在Spark、Hadoop、Spring等软件中都可以看到它的影子。Metrics提供了多种指标工具,如Gauge、Counter、Metrer、Timer、Histogram以及HealthCheck等。
这次先看一下Gauge,其他的看时间再逐个学习。
Gauge 可以说是Metrics的最简单的一个指标:它的作用就是引用一个值。
来看个例子:
public class GaugeShow { public static void main(String[] args) throws InterruptedException { final MetricRegistry metrics = new MetricRegistry(); ConsoleReporter reporter = ConsoleReporter.forRegistry(metrics).build(); reporter.start(3, TimeUnit.SECONDS); Gauge<String> gauge = new Gauge<String>() { @Override public String getValue() { return new SimpleDateFormat("MM-dd HH:mm:ss").format(new Date()); } }; metrics.register("时间计时", gauge); for (int i = 0; i < 3; i++) { TimeUnit.SECONDS.sleep(3); } } }
代码中通过匿名类的形式创建了一个Gauge接口的实例,作用是获取当前的时间。实现得非常简单,不需要多做解释。
因为Gauge接口只有一个方法getValue,是一个函数接口,所以可以考虑用lambda表达式创建Gauge接口实例:
Gauge<String> gauge = () -> new SimpleDateFormat("MM-dd HH:mm:ss").format(new Date());
既然Gauge这么简单,为什么不直接使用Gauge的值,还偏要用Gauge接口封装一下?是为了能在Metrics框架中记录并表示这个值。
Metrics框架中有几个基础概念:MetricRegistry、Reporter以及Metric。Metric前面提过两句,也演示了Metric之一的Gauge的用法。接下来简单介绍下MetricRegistry和Reporter。
MetricRegistry
MetricRegistry的作用从类名就可以看出来:是Metric的注册中心(或者说是Metric容器),负责管理用户创建的所有Metric实例。
MetricRegistry主要提供了几种工具方法:
- 指标名称创建
- 创建Metric实例并自动注册
- 增删Metric实例
- 对注册的Metric实例应用监听器和过滤器
Reporter接口
从接口名称看起来,Reporter的作用应该是汇总指标实例的数据并生成报表。
Reporter接口的主要子类是 ScheduledReporter ,其核心是 ScheduledExecutorService 和 ScheduledFuture ,用来管理报表的定时输出。 ScheduledReporter 的子类包括 ConsoleReporter 、 CsvReporter 和 Slf4jReporter ,可以以不同的形式展示报表数据。
在4.x版本以前,Reporter接口还有实现一个类 JmxReporter ,可以通过JMX的形式输出报表数据。
扫了几个Reporter的实现,看出Reporter确实主要用来生成报表。不过也许是Metrics框架想要提供更多的自由,Reporter接口里并没有定义任何需要实现的方法:
/* * A tag interface to indicate that a class is a Reporter. */ public interface Reporter extends Closeable { }
如果需要以自定义的形式输出报表数据,可以继承 ScheduledReporter 类或实现 Report 接口来实现自己的需求,比如将报表数据以HTTP发送给统计应用。
Other
最后,看一下示例代码的执行结果:
-- Gauges ---------------------------------------------------------------------- 时间计时 value = 06-19 09:17:32 19-6-19 9:17:35 ================================================================ -- Gauges ---------------------------------------------------------------------- 时间计时 value = 06-19 09:17:35 19-6-19 9:17:38 ================================================================ -- Gauges ---------------------------------------------------------------------- 时间计时 value = 06-19 09:17:38
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 一文读懂监督学习、无监督学习、半监督学习、强化学习这四种深度学习方式
- 学习:人工智能-机器学习-深度学习概念的区别
- 统计学习,机器学习与深度学习概念的关联与区别
- 混合学习环境下基于学习行为数据的学习预警系统设计与实现
- 学习如何学习
- 深度学习的学习历程
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Agile Web Application Development with Yii 1.1 and PHP5
Jeffrey Winesett / Packt Publishing / 2010-08-27
In order to understand the framework in the context of a real-world application, we need to build something that will more closely resemble the types of applications web developers actually have to bu......一起来看看 《Agile Web Application Development with Yii 1.1 and PHP5》 这本书的介绍吧!