Graphite监控数据指标不准的问题原因及修复

最近碰到一个问题,在grafana上发现某项数据统计的不准,具体表现为短期内数据是准确的(6小时内),6天内的数据动态变化轨迹是对的,数据偏小,6天后的数据完全不对,数据更小。
由于以前没有接触过grafana,graphite,statsd等技术,所以需要从头查看找资料学习。一开始以为是端点上传数据有问题,所以从端开始按链路找起来,进过验证排除了grafana,statsd的问题,问题应该出在graphite上,关于graphite的组成部分如下图所示

通过查看日志的方式。通过上面的,6小时,6天的时间描述,基本上可以确定是存储聚合的问题,具体可以通过graphite的存储配置文件中找到原因storage-schemas.conf
Graphite监控数据指标不准的问题原因及修复_第1张图片
whisper的聚合方式是6小时内10秒的数据聚合,6天内是1分钟,5年是10分钟聚合方式,和我们的数据问题现象一致。
基本上确定是wisper存储聚合算法的问题,关于wisper的介绍,可以移步这里https://github.com/graphite-project/whisper
通过whisper-dump.py工具,把出问题的指标库dump出来后,果真发现问题
Graphite监控数据指标不准的问题原因及修复_第2张图片
这个数据指标的aggregation method,应该为sum(求和),不应该是求average(求平均数)。赶紧看一眼聚合算法,配置文件storage-aggregation.conf,

[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.5
aggregationMethod = average

未声明的metric会使用default_average规则中的aggregationmethod进行聚合,但是他的xFilesFactor为0.5和数据库文件中的0.3不符合,所以,当时严重怀疑是配置文件没有生效的问题,进行了配置文件确认,发现就是使用的这个配置文件,后来通过官方文档获得,storage-aggregation.conf文件内容,会每分钟加载一次。理论上来说新的metric应该很快使用设置的规count_legacy,经过仔细查看文档,才得知虽然每分钟加载一次storage-aggregation.conf,但是如果metric优先于storage-aggregation.conf规则,先生成wisper文件,那么后期wisper文件的aggregationmethod的方法也不会变更。
终于问题找到了,由于先上传的metric指标,后修改的配置文件导致,metric指标没有按照count_legacy规则进行创建whisper文件。修改策略是

./whisper-set-aggregation-method.py /opt/graphite/storage/whisper/stats_counts/order/refund.wsp sum 0

修改完成后,可以通过whisper-dump.py查看新文件的aggregation的方法是否生效

./whisper-dump.py /opt/graphite/storage/whisper/stats_counts/order/paid_micropayd.wsp | more

至此,graphite数据不一致的问题解决。除了使用以上工具外(可以保留6小时内的有效数据),也可以通过直接删除.wsp文件格式的方式来修复数据。
参考资料:
https://github.com/graphite-project
https://github.com/statsd/statsd
 

你可能感兴趣的:(云)