关于metrics:微服务性能监控系列基于Metrics的实时监控系统
原文链接 Metrics是一个提供服务性能检测工具的Java类库,它提供了功能强大的性能指标工具库用于度量生产环境中的各要害组件性能。度量类型Metrics提供了以下几种根本的度量类型: Gauge:用于提供自定义度量。Counter:计数器,实质是一个java.util.concurrent.atomic.LongAdder。Histogram:直方图数据。Meter:统计零碎中某一事件的响应速率,如TPS、QPS。该项指标值间接反馈零碎以后的解决能力Timer:计时器,是Meter和Histogram的联合,能够统计接口申请速率和响应时长。GaugeGauge是对一项值的刹时度量。咱们能够通过实现Gauge接口来依据业务场景自定义度量。 例如,想要度量队列中处于期待状态的作业数量: public class QueueManager { private final Queue queue; public QueueManager(MetricRegistry metrics, String name) { this.queue = new Queue(); // 通过MetricRegistry 的register办法注册Gauge度量 metrics.register(MetricRegistry.name(QueueManager.class, name, "size"), new Gauge<Integer>() { @Override public Integer getValue() { return queue.size(); } }); }}官网目前提供了以下几种Gauge实现: CounterCounter是一个惯例计数器,用于对某项指标值进行累加或者递加操作。 Counter实质是一个java.util.concurrent.atomic.LongAdder,在多线程同时更新计数器的场景下,当并发量较大时,LongAdder比AtomicLong具备更高的吞吐量,当然空间资源耗费也更大一些。 final Counter evictions = registry.counter(name(SessionStore.class, "cache-evictions"));evictions.inc();evictions.inc(3);evictions.dec();evictions.dec(2);HistogramsHistogram反馈的是数据流中的值的散布状况。蕴含最小值、最大值、平均值、中位数、p75、p90、p95、p98、p99以及p999数据分布状况。 private final Histogram responseSizes = metrics.histogram(name(RequestHandler.class, "response-sizes"));public void handleRequest(Request request, Response response) { // etc responseSizes.update(response.getContent().length);}Histogram计算分位数的办法是先对整个数据集进行排序,而后取排序后的数据集中特定地位的值(比方p99就是取倒序1%地位的值)。这种形式适宜于小数据集或者批处理零碎,不适用于要求高吞吐量、低延时的服务。 对于数据量较大,系统对吞吐量、时延要求较大的场景,咱们能够采纳抽样的形式获取数据。通过动静地抽取程序运行过程中的可能代表零碎实在运行状况的一小部分数据来实现对整个零碎运行指标的近似度量,这种办法叫做蓄水池算法(reservoir sampling)。 Metrics中提供了各式各样的Reservoir实现: ...