监控工具——Metrics的Histogram可配置项
Metrics的Histogram配置参数
这篇是之前监控工具——Metrics 快速入门的补充
代码地址
因为每个例子涉及代码较多,且包含测试用例,如果都贴到文章中内容过多,所以只贴出了部分代码。全部的代码在这里: https://gitee.com/daifyutils/springboot-samples。
此篇文章所属模块为:base-metrics
Histogram
在使用Histogram进行指标统计的时候,可以看到其支持一个Reservoir
类型的参数
public Histogram(Reservoir reservoir) {this.reservoir = reservoir;this.count = LongAdderProxy.create();}
通过查看可以看到此参数支持的实现类有5种
ExponentiallyDecayingReservoir
基于指数级别的抽样算法,根据更新时间与开始时间的差值转化为权重值,权重越大数据被保留的几率越大。 内部使用ConcurrentSkipListMap并发跳表来存储数据。它的大小没有限制,因此使用它对高频过程进行采样可能需要大量内存。因为它记录了每次测量。
使用方式
Histogram histogram = new Histogram(new ExponentiallyDecayingReservoir());
使用这种方法可能会有内存问题,官方文档专门提醒过这个问题
While
SlidingTimeWindowReservoir
is easier to understand thanExponentiallyDecayingReservoir
, it is not bounded in size, so using it to sample a high-frequency process can require a significant amount of memory. Because it records every measurement, it’s also the slowest reservoir type.
UniformReservoir
随机抽样,随着更新次数的增加,数据被抽样的几率减少。
使用方式
Histogram histogram = new Histogram(new UniformReservoir());
或者Histogram histogram = new Histogram(new UniformReservoir(1028));
SlidingWindowReservoir
只存最近N条数据的一种采样的指标分析模式
使用方式
public static void main(String[] args) throws InterruptedException {initMetric();// SlidingWindowReservoir(只存最近N条数据)// 注册一个HistogramHistogram histogram = new Histogram(new SlidingWindowReservoir(10));registry.register(MetricRegistry.name(HistogramsTest.class, "request", "histogram"), histogram);int i = 0;while(true){Thread.sleep(1000);i++;System.out.println(((i/10) + 1) * 100000);histogram.update(((i/10) + 1) * 100000);}}
最开始输出内容
-- Histograms ------------------------------------------------------------------
dai.samples.metrics.HistogramsTest.request.histogramcount = 9min = 100000max = 100000mean = 100000.00stddev = 0.00median = 100000.0075% <= 100000.0095% <= 100000.0098% <= 100000.0099% <= 100000.0099.9% <= 100000.00
最后输出内容
dai.samples.metrics.HistogramsTest.request.histogramcount = 19min = 200000max = 200000mean = 200000.00stddev = 0.00median = 200000.0075% <= 200000.0095% <= 200000.0098% <= 200000.0099% <= 200000.0099.9% <= 200000.00
SlidingTimeWindowReservoir
只记录最近的指定时间范围的指标分析模式
使用方式
public static void main(String[] args) throws InterruptedException {initMetric();// SlidingTimeWindowReservoir(指定时间窗口重置数据)// 注册一个HistogramHistogram histogram = new Histogram(new SlidingTimeWindowReservoir(10,TimeUnit.SECONDS));registry.register(MetricRegistry.name(HistogramsTest.class, "request", "histogram"), histogram);int i = 0;while(true){Thread.sleep(1000);i++;System.out.println(((i/10) + 1) * 100000);histogram.update(((i/10) + 1) * 100000);}}
最开始输出内容
-- Histograms ------------------------------------------------------------------
dai.samples.metrics.HistogramsTest.request.histogramcount = 9min = 100000max = 100000mean = 100000.00stddev = 0.00median = 100000.0075% <= 100000.0095% <= 100000.0098% <= 100000.0099% <= 100000.0099.9% <= 100000.00
最后输出内容
dai.samples.metrics.HistogramsTest.request.histogramcount = 19min = 200000max = 200000mean = 200000.00stddev = 0.00median = 200000.0075% <= 200000.0095% <= 200000.0098% <= 200000.0099% <= 200000.0099.9% <= 200000.00
SlidingTimeWindowArrayReservoir
SlidingTimeWindowArrayReservoir是对SlidingTimeWindowReservoir的优化。根据官方描述SlidingTimeWindowArrayReservoir提供了更低的内存开销。其GC开销比SlidingTimeWindow低60-80倍
使用方式
Histogram histogram = new Histogram(new SlidingTimeWindowArrayReservoir(1,TimeUnit.MINUTES));
对于其使用所需内存官方提供了相关的例子
Example: 10K measurements / sec with reservoir storing time of 1 minute will take 10000 * 60 * 128 / 8 = 9600000 bytes ~ 9 megabytes
Timer
Timer提供了直方图的相关数据分析,其内部也初始化了一个Histogram
Timer timer = registry.timer(MetricRegistry.name(TimersTest.class,"get-latency"));
默认情况下其初始化的Timer使用ExponentiallyDecayingReservoir
MetricBuilder<Timer> TIMERS = new MetricBuilder<Timer>() {@Overridepublic Timer newMetric() {return new Timer();}@Overridepublic boolean isInstance(Metric metric) {return Timer.class.isInstance(metric);}};public Timer() {this(new ExponentiallyDecayingReservoir());}
明白上面不同的参数类型我们可以在使用Timer的时候使用需要的Reservoir
public class ReservoirTimersTest extends MetricBase {public static Random random = new Random();public static void main(String[] args) throws InterruptedException {initMetric();MetricRegistry.MetricSupplier metricSupplier = () -> new Timer(new SlidingTimeWindowReservoir(1,TimeUnit.MINUTES));Timer timer = registry.timer(MetricRegistry.name(TimersTest.class,"get-latency"),metricSupplier);Timer.Context ctx;while(true){ctx = timer.time();Thread.sleep(random.nextInt(1000));ctx.stop();}}}
监控工具——Metrics的Histogram可配置项相关推荐
- 监控工具——Metrics 快速入门
Metrics 快速入门 关于Metrics更多的内容可以查看 metrics-getting-started 代码地址 因为每个例子涉及代码较多,且包含测试用例,如果都贴到文章中内容过多,所以只贴出 ...
- java度量页面_JAVA Metrics 度量工具使用介绍1
Metrics是一个给JAVA提供度量工具的包,在JAVA代码中嵌入Metrics代码,可以方便的对业务代码的各个指标进行监控,同一时候,Metrics可以非常好的跟Ganlia.Graphite结合 ...
- Yammer Metrics实现服务指标收集与监控
1.用途 可以对应用程序的运行状态以及各种指标进行收集. 2.官网地址 https://metrics.dropwizard.io/2.2.0/manual/core/ 3.yammer metric ...
- JAVA Metrics 度量工具使用介绍1
Java Metric使用介绍1 Metrics是一个给JAVA提供度量工具的包,在JAVA代码中嵌入Metrics代码,可以方便的对业务代码的各个指标进行监控,同一时候,Metrics可以非常好的跟 ...
- Yammer Metrics的使用
Yammer Metrics简介 最近用到的某个框架,其官网提到利用Yammer Metrics来测量系统运行状态,需要对其统计的具体参数有个基本的了解,OK,那就需要弄清几个简单的问题: Yamme ...
- 利用AppMetrics对Web进行监控教程
一.基础准备 1. 安装依赖 这里可以通过nuget或使用命令行进行安装,具体需要安装的类库如下(注意版本): Install-Package App.Metrics.AspNetCore.Mvc - ...
- prometheus变量_TiKV 源码解析系列文章(四)Prometheus(下)
本文为 TiKV 源码解析系列的第四篇,接上篇继续为大家介绍 rust-prometheus.上篇主要介绍了基础知识以及最基本的几个指标的内部工作机制,本篇会进一步介绍更多高级功能的实现原理. 与上篇 ...
- 使用python读取kafka实时topic数据demo,包括安装kafka module
1. 安装kafka module kafka-python安装,转载:https://blog.csdn.net/see_you_see_me/article/details/78468421 1. ...
- 学习ebpf_exporter项目搞懂prometheus client端的全调度
bpf碰上prometheus 简介 bpf_exporter的完整调度流程: 组成模块 导入和配置 采集数值 数据落盘 http调度 代码分析--重点模块 exporter结构解析 定位数据采集区 ...
最新文章
- 派生类参数初始化列表和基类构造函数顺序
- monty python喜剧-经典喜剧电影推荐:巨蟒与圣杯
- UNL/EVE关联putty和wireshark
- Java培训教程之使用Lock取代synchronized
- HibernateNONSTRICT_READ_WRITE CacheConcurrencyStrategy如何工作
- MVC中使用代码创建数据库(code first +mysql+EF)
- C++新特性探究(九):functor仿函数
- c# 执行js的方法
- Android之提交数据到服务端方法简单封装
- java公司自己封装的框架_SpringBoot封装自己的Starter的实现方法
- IDEA(2018)导入项目报错解决方案
- RPG Maker MV常用的一些插件
- GfK十大洞见揭示物联网时代正全面开启
- matlab catia程序,利用VBA进行CATIA二次开发的基本流程 | 坐倚北风
- 分享学JavaScript的第七天
- Kafka源码研究--Comsumer获取partition下标
- stc单片机如何用C程序将IO口设为强推挽输出
- nofollow标签使用方法
- 使用Github+Markdown搭键自己的笔记本
- Python——循环嵌套