Metrics学习01 – Gauge

栏目: Java · 发布时间: 6年前

内容简介:最近在写一个小应用,有些计量方式觉得可以参考一下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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

统计思维

统计思维

[美] Allen B. Downey / 金迎 / 人民邮电出版社 / 2015-9 / 49.00元

现实工作中,人们常常需要用数据说话。可是,数据自己不会说话,需要人对它进行分析和挖掘才能找到有价值的信息。概率统计是数据分析的通用语言,是大数据时代预测未来的根基。如果你有编程背景,就能以概率和统计学为工具,将数据转化为有用的信息和知识,让数据说话。本书介绍了如何借助计算而非数学方法,使用Python语言对数据进行统计分析。 通过书中有趣的案例,你可以学到探索性数据分析的整个过程,从数据收集......一起来看看 《统计思维》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具