Metrics:如何让线上应用更加透明?

本文介绍了Metrics监控指标类库,包括Meter、Gauge、Counter、Histogram和Timer等度量类型,通过实例展示了如何使用Metrics进行监控实践,强调了Metrics在构建线上应用监控系统中的价值。

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

1

上期我们结合《SRE Google 运维解密》,对监控系统进行了一次脉络梳理,知道一旦离开了监控系统,我们就没法辨别一个服务是不是在正常提供服务,就如同线上的服务在随风裸奔。

文章分享最后,我们把 Google 十余年的监控实践,也尝试进行简单梳理,对于后期落地实践有一定参考意义。

不过,虽然对监控系统有了脉络上的了解,但是我们也知道,如果没有一套设计周全的监控指标体系,也就如同蒙着眼睛在狂奔,本期就好好说说:指标监控的类库 Metrics。

2

Metrics 是啥?简单去说,Metrics 是一款监控指标的度量类库,提供了一种功能强大的工具包,帮助开发者来完成自定义的监控工作。再通俗点,Metrics 类库是搬砖党的福音。

Metrics 的几种度量类型?在看框架源码时,时不时会看到一些 Meter、Guage、Counter、Histogram 等关键词,到底这些词说的都是啥?为了更好的熟读源码,就借助 Metrics 定义的几种度量类型,逐个进行解密。

Meter 主要用于统计系统中某一个事件的速率,可以反应系统当前的处理能力,帮助我们判断资源是否已经不足。可以很方便帮助我们统计,每秒请求数(TPS)、每秒查询数(QPS)、最近 1 分钟平均每秒请求数、最近 5 分钟平均每秒请求数、最近 15 分钟平均每秒请求数等。

Guage 是最简单的度量指标,只有一个简单的返回值,通常用来记录一些对象或者事物的瞬时值。通过 Gauge 可以完成自定义的度量类型,可以用于衡量一个待处理队列中任务的个数,以及目前内存使用量等等场景。

Counter 是累计型的度量指标,内部用 Gauge 封装了 AtomicLong。主要用它来统计队列中 Job 的总数;错误出现次数;服务请求数等等场景。

Histogram 是统计数据的分布情况的度量指标,提供了最小值,最大值,中间值,还有中位数,75 百分位,90 百分位,95 百分位,98 百分位,99 百分位,和 99.9 百分位的值。使用的场景,例如统计流量最大值、最小值、平均值、中位值等等。

Timer 本质是 Histogram 和 Meter 的结合,可以很方便的统计请求的速率和处理时间,例如磁盘读延迟统计,以及接口调用的延迟等信息的统计等等场景。

Metrics 类库中还有啥?

3

说了那么多 Metrics 类库的概念,也说的那么强大,不妨撸码实践,谈谈虚实。

Metrics 中基本度量类型的实践

如脑图所示,主要分两步走,先引入相关依赖,然后写代码反复进行体会。

Meter 代码实践(详细看代码呗)。

import com.codahale.metrics.ConsoleReporter;
import com.codahale.metrics.Meter;
import com.codahale.metrics.MetricRegistry;


import java.util.concurrent.TimeUnit;


/**
 * Meters(TPS 计算器)
 * 示例:
 * 例如:每秒请求数(TPS)
 * 例如:最近 1 分钟平均每秒请求数
 * 例如:最近 5 分钟平均每秒请求数
 * 例如:最近 15分钟平均每秒请求数
 *
 * @author 一猿小讲
 */
public class MeterApp {


    /**
     * MetricRegistry 是 Metrics 的核心,用于存放应用中所有 metrics 的容器
     * 所有度量工具都要注册到 MetricRegistry 实例中才可以使用
     */
    private final MetricRegistry metrics = new MetricRegistry();


    /**
     * Meters 本身是一个自增计数器,统计系统中某一个事件的速率
     */
    private final Meter requests = metrics.meter("requests");


    /**
     * 处理请求
     */
    public void handleRequest() {
        requests.mark();
        // etc
        System.out.println("处理请求handleRequest");
    }


    /**
     * 启动指标报告
     * (采用控制台输出的形式)
     */
    public
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值