前言:

     最近公司在折腾应用级别的性能监控,现在已经有C、Java的版本了。 貌似还缺少我们组专用的Python版本。 现在做Metrics的公司有OneApm,就在我们的楼上。  oneapm的各种计算统计的api和dashboard面板虽然很好用,毕竟还是需要付费的。 今天就说下,我们是如何在python下获取metrics性能指标的.     这里透露下metric性能监控的架构,client其实是各个语言的metrics模块,数据的存取是Elasticsearch,前端的显示暂时是Kibana,当然kibana优缺点很鲜明,他不能很好的定制化页面,包括权限管理.   对于client –> elasticsearch集群的过程,可以增加本地一个本地转发节点完成,像scribe、logstash那样.

那么metries是什么?  是用来统计计算应用的性能指标,  频率, 耗时 ,大小长短…

举个例子,一个用python开发的爬虫服务:

一共处理了多少页面? 
每秒钟的请求数是多少(TPS)?
平均每个请求处理的时间?
请求处理的最长耗时?
等待处理的请求队列长度?
每个函数在1分 5分 15分,分别的平均值在多少?

上面的这些需求就很适合用metrices来实现. 

metrics原本是java的包,现在各个语言也都有基于metrices统计开发的模块。比如python的appmetrics,这名字就知道是应用监控 . 以前用python自己实现过一个简单的metrics,当然代码写得太low,不得见人…  这次结合appmetrics来说说五中metrics类型的区别,及应用场景。 

文章写得不太严谨, 请砖家拍砖,另外标注下原文地址,http://xiaorui.cc/?p=2447

一共有五种 Metrics 类型

Gauges:

Gauges,最简单的度量指标,只有一个简单的返回值,例如,我们想衡量一个待处理队列中任务的个数

gauge可以是字符串,也可以是数字.

Counter:

Counter,就是计数器,inc增加,dec减少.  在appmetrics里面只暴露了notify


Meters:
Meters,度量一系列事件发生的速率(rate),例如TPS。Meters会统计最近1分钟,5分钟,15分钟,还有全部时间的速率。

meter = metrics.new_meter(“meter_test”)
meter.notify(1)
meter.notify(1)
meter.notify(3)
meter.get()

返回结果:

count: 总数
mean: 平均值
one: 1分钟
five: 5分钟
fifteen: 15分钟
day: 一天的平均值
kind: “meter”

我们可以对比下java metrices运行结果:

             count = 134
         mean rate = 2.13 events/second
     1-minute rate = 2.52 events/second
     5-minute rate = 3.16 events/second
    15-minute rate = 3.32 events/second

注:非常像 Unix 系统中 uptime 和 top 中的 load.

Histograms

Histogram统计数据的分布情况。比如最小值,最大值,中间值,还有中位数,75百分位, 90百分位, 95百分位, 98百分位, 99百分位, 和 99.9百分位的值(percentiles)。

返回结果:


运行之后结果大致如下:
             count = 56
               min = 1122
               max = 99650
              mean = 48735.12
            stddev = 28609.02
            median = 49493.00
              75% <= 72323.00
              95% <= 90773.00
              98% <= 94011.00
              99% <= 99650.00
            99.9% <= 99650.00

Timers

Timer其实是 Histogram 和 Meter 的结合, 在appmetrices里面没有直接的Timers的实现,但是可以通过Tagging实现.

返回的结果

如果用java metrics运行之后结果如下.

             count = 38
         mean rate = 1.90 calls/second
     1-minute rate = 1.66 calls/second
     5-minute rate = 1.61 calls/second
    15-minute rate = 1.60 calls/second
               min = 13.90 milliseconds
               max = 988.71 milliseconds
              mean = 519.21 milliseconds
            stddev = 286.23 milliseconds
            median = 553.84 milliseconds
              75% <= 763.64 milliseconds
              95% <= 943.27 milliseconds
              98% <= 988.71 milliseconds
              99% <= 988.71 milliseconds
            99.9% <= 988.71 milliseconds

使用经验总结,

一般情况下,当我们需要统计某个函数或者action被调用的频率,会使用Meters。当我们需要统计某个函数的执行耗时,会使用Histograms。当我们既要统计频率又要统计耗时的时候,我们会使用Timers。所以说,Timers的数据最全。 



对Python及运维开发感兴趣的朋友可以加QQ群 : 478476595 !!!
{ 2000人qq大群内有各厂大牛,常组织线上分享及沙龙,对高性能及分布式场景感兴趣同学欢迎加入该QQ群 }

另外如果大家觉得文章对你有些作用!   帮忙点击广告. 一来能刺激我写博客的欲望,二来好维护云主机的费用.
如果想赏钱,可以用微信扫描下面的二维码. 另外再次标注博客原地址  xiaorui.cc  ……   感谢!
暂无相关产品