.net应用监控类库Metrics.NET之Histograms

直方图度量流式数据中值的分布情况,引用《Java library documentation

直方图度量不仅允许您测量简单数值,如最小值,平均值,最大值和标准差的值,而且可以测量如中位数或第95个百分点这样的分位数。

传统上,计算中位数(或任何其他分位数)的方式是将整个数据集进行排序,中间(或从最后的1%,第99个百分点)中取值。 这适用于小数据集或批处理系统,但不适用于高吞吐量,低延迟服务。

解决方案是在数据采集时对数据进行采样。 通过维护一个统计上代表整个流数据的小型,可管理的容器,我们可以快速简便地计算分位数,这些分位数是实际分位数的有效近似值。 这种技术被称为蓄水池抽样。

直方图样例代码

    private readonly Histogram histogram = Metric.Histogram("Search Results", Unit.Items);

    public void Search(string keyword)
    {
        var results = ActualSearch(keyword);

        histogram.Update(results.Length);

    }

提供开箱即用三种采样类型:

  • 指数衰减抽样 - 产生分位数,表示最后五分钟(大约)的数据
  • 平均抽样 - 产生的分位数在整个直方图的生命周期内都是有效的
  • 滑动窗口抽样 - 产生代表过去N次测量的分位数

有关抽样类型的更多信息可以在Java库的文档中找到

跟踪用户的值

直方图能够跟踪记录用户值中的最小值,最大值或最后一个值。 用户值可以是任何字符串值(documentId,operationId等)。

下例直方图将记录哪个被操作的documentId返回了最多的条目:

public class UserValueHistogramSample

{

    private readonly Histogram histogram =

        Metric.Histogram("Results", Unit.Items);

 

    public void Process(string documentId)

    {

        var results = GetResultsForDocument(documentId);

        this.histogram.Update(results.Length, documentId);

    }

}

运行一些请求后,文本格式的直方图输出如下所示:

    Results

             Count = 90 Items

              Last = 46.00 Items

   Last User Value = document-3

               Min = 2.00 Items

    Min User Value = document-7

               Max = 98.00 Items

    Max User Value = document-4

              Mean = 51.52 Items

            StdDev = 30.55 Items

            Median = 50.00 Items

              75% <= 80.00 Items

              95% <= 97.00 Items

              98% <= 98.00 Items

              99% <= 98.00 Items

            99.9% <= 98.00 Items

正如您可以看到直方图记录了最小值(2项)属于文档-7,最大值(98项)属于文档-4,最后一个值(46项)属于文档-3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值