注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

gmd20的个人空间

// 编程和生活

 
 
 

日志

 
 

设置storage-aggregation对graphite最高的精度的metric数据无效  

2014-09-11 10:49:40|  分类: 程序设计 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
graphite的whisper数据存储里面,
如果数据有设置了retentions  了,conf/storage-schemas.conf 
那么graphite会按照你配置的级别自己调整数据存储精度,越久的时间的数据,保存的精度越小。
比如下面这个statsd的10s:6h,1min:6d,10min:1800d, 6个小时已经的精度是10秒, 6天的精度是1分钟。

bright@ubuntu:/opt/graphite$ cat conf/storage-schemas.conf
# Schema definitions for Whisper files. Entries are scanned in order,
# and first match wins. This file is scanned for changes every 60 seconds.
#
# [name]
# pattern = regex
# retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ...

# Carbon's internal metrics. This entry should match what is specified in
# CARBON_METRIC_PREFIX and CARBON_METRIC_INTERVAL settings
[carbon]
pattern = ^carbon\.
retentions = 60:90d

[vStatistics]
pattern = ^vStat
retentions = 10s:1d

[stats]
pattern = ^stats.*
retentions = 10s:6h,1min:6d,10min:1800d

[default_1min_for_1day]
pattern = .*
retentions = 60s:1d


调整压缩的时候,数据是根据storage-aggregation.conf的配置的aggregationMethod方法来进行的,比如平均值,最大值和最小值等等。

bright@ubuntu:/opt/graphite$ cat conf/storage-aggregation.conf
# Aggregation methods for whisper files. Entries are scanned in order,
# and first match wins. This file is scanned for changes every 60 seconds
#
# [name]
# pattern = <regex>
# xFilesFactor = <float between 0 and 1>
# aggregationMethod = <average|sum|last|max|min>
#
# name: Arbitrary unique name for the rule
# pattern: Regex pattern to match against the metric name
# xFilesFactor: Ratio of valid data points required for aggregation to the next retention to occur
# aggregationMethod: function to apply to data points for aggregation
#


[min]
pattern = \.lower$
xFilesFactor = 0.1
aggregationMethod = min

[max]
pattern = \.upper(_\d+)?$
xFilesFactor = 0.1
aggregationMethod = max

[sum]
pattern = \.sum$
xFilesFactor = 0
aggregationMethod = sum

[count]
pattern = \.count$
xFilesFactor = 0
aggregationMethod = sum

[count_legacy]
pattern = ^stats_counts.*
xFilesFactor = 0
aggregationMethod = sum

[default_average]
pattern = .*
xFilesFactor = 0.3
aggregationMethod = average


但graphite有一个奇怪的地方是,对最高的精度,设置的aggregationMethod 不起作用。
比如上面的配置如果statsd的是10秒钟最高,如果你这10秒内发送几次数据给graphite的话,它只保存最新的那一个。
ggregationMethod  只有在把10秒精度的数据转成 1分钟的时候,才会去合并。

这样的设置,其实就是随便的保存某个采样点,只保留其中一个,你发的越快,采样率就越低。一般这样的机制也是不会有问题的。但 如果直接自己发送statsd里面的 count,  low , upper , sum等数据给graphite的时候,还是希望最高精度的ggregationMethod 也起作用的。这样如果同时有几个statsd给graphite发送同样的数据的时候,graphite也能自己在统计一下, 比如 counter就是把所有的数据再求和一下。 不过对count_ps这种每秒的次数这种metric,就希望最高精度级别的使用用sum求和,其他级别的精度用平均值来计算,感觉会有点问题,看来还是只用一个statsd由statsd来做统计才行啊。

修改一下 whisper.py  代码,应该是给最高精度的数据也应用aggregationMethod 方法,但满不满足具体应用就不清楚
在  def file_update(fh, value, timestamp): 做以下修改,感觉应该可以(没有经过测试验证)

if baseInterval == 0: #This file's first update
fh.seek(archive['offset'])
fh.write(myPackedPoint)
baseInterval,baseValue = myInterval,value
else: #Not our first update
timeDistance = myInterval - baseInterval
pointDistance = timeDistance / archive['secondsPerPoint']
byteDistance = pointDistance * pointSize
+ # apply aggregationMethod on highest-precision archive
+ if byteDistance == 0:
+ aggregationMethod = header['aggregationMethod']
+ aggregateValue = aggregate(aggregationMethod, [value, baseValue])
+ myPackedPoint = struct.pack(pointFormat,myInterval,aggregateValue
myOffset = archive['offset'] + (byteDistance % archive['size'])
fh.seek(myOffset)
fh.write(myPackedPoint)

  评论这张
 
阅读(574)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017