JAVA监控之Metrics

1. Metrics是什么?

它是一个工具集,不是一个框架。它在kafka,spark,hadoop,flink和cassandra等流行框架中都得到了广泛的应用。

官网:https://metrics.dropwizard.io

2. Metrics之Meter

meter用于统计基于时间的时间率(event rate over time),主要包含:

(1)监控开始至当前总共接收的时间数量

(2)估算的平均事件率

(3)估算的1min内的事件率

(4)估算的5min内的事件率

(5)估算的15min内的事件率

2.1 代码示例

(1)pom依赖

<dependency>
    <groupId>io.dropwizard.metrics</groupId>
    <artifactId>metrics-core</artifactId>
    <version>3.2.6</version>
</dependency>

(2)代码

public class MeterMetricsDemo {
    //metrics注册中心
    private static final MetricRegistry metrics = new MetricRegistry();
    //创建meter类型的监控,并注册到注册中心,name会作为统计结果的标题,它用于统计请求事件率
    /**
     * -- Meters ----------------------------------------------------------------------
     * reqRate
     */
    private static final Meter reqRate = metrics.meter("reqRate");
    //用于统计请求体的大小
    /**
     * -- Meters ----------------------------------------------------------------------
     * reqSize
     */
    private static final Meter reqSize = metrics.meter("reqSize");

    public static void main(String[] args) {
        startReport();
        while (true) {
            sleepRandomSeconds();
            response(new byte[ThreadLocalRandom.current().nextInt(10_000_000)]);
        }
    }
    private static void response(byte[] request){
        System.out.println("==========接收到请求");
        reqRate.mark();
        reqSize.mark(request.length);
    }

    private static void startReport() {
        ConsoleReporter reporter =
                //给metrics设置报告模式
                ConsoleReporter.forRegistry(metrics)
                //设置事件率的统计事件,例如events/second,events/millisecond, events/hour...
                .convertRatesTo(TimeUnit.SECONDS)
                //Timer类型的metrics才会用到,meter不起作用
                //.convertDurationsTo(TimeUnit.HOURS)
                .build();

        //设置每隔多长时间间隔打印一次报告,例如每隔3s打印一次报告
        reporter.start(3, TimeUnit.SECONDS);
    }

    private static void sleepRandomSeconds() {

        int random = ThreadLocalRandom.current().nextInt(3);
        try {
            TimeUnit.SECONDS.sleep(random);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

(3)日志输出

==========接收到请求
==========接收到请求
==========接收到请求
22-3-31 22:09:46 ===============================================================

-- Meters ---
-------------------------------------------------------------------
reqRate
             count = 4
         mean rate = 1.15 events/second
     1-minute rate = 0.00 events/second
     5-minute rate = 0.00 events/second
    15-minute rate = 0.00 events/second
reqSize
             count = 20404333
         mean rate = 5858540.55 events/second
     1-minute rate = 0.00 events/second
     5-minute rate = 0.00 events/second
    15-minute rate = 0.00 events/second


==========接收到请求
22-3-31 22:09:49 ===============================================================

-- Meters ----------------------------------------------------------------------
reqRate
             count = 5
         mean rate = 0.77 events/second
     1-minute rate = 1.00 events/second
     5-minute rate = 1.00 events/second
    15-minute rate = 1.00 events/second
reqSize
             count = 23931535
         mean rate = 368
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值