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

最近碰到一个问题,在grafana上发现某项数据统计的不准,具体表现为短期内数据是准确的(6小时内),6天内的数据动态变化轨迹是对的,数据偏小,6天后的数据完全不对,数据更小。
由于以前没有接触过grafana,graphite,statsd等技术,所以需要从头查看找资料学习。一开始以为是端点上传数据有问题,所以从端开始按链路找起来,进过验证排除了grafana,statsd的问题,问题应该出在graphite上,关于graphite的组成部分如下图所示
Graphite Components
通过查看日志的方式。通过上面的,6小时,6天的时间描述,基本上可以确定是存储聚合的问题,具体可以通过graphite的存储配置文件中找到原因storage-schemas.conf

whisper的聚合方式是6小时内10秒的数据聚合,6天内是1分钟,5年是10分钟聚合方式,和我们的数据问题现象一致。
基本上确定是wisper存储聚合算法的问题,关于wisper的介绍,可以移步这里https://github.com/graphite-project/whisper
通过whisper-dump.py工具,把出问题的指标库dump出来后,果真发现问题

这个数据指标的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
 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 是的,我知道Java的监控指标采集包micrometer。Micrometer是一个开源的度量指标库,它支持在JVM应用程序中采集和公开各种类型的指标,例如计数器、分布式直方图和计时器等。Micrometer提供了一个通用的API,可用于在各种监控系统中发送指标,包括Prometheus、InfluxDB、Graphite等。 ### 回答2: 是的,我知道Java的监控指标采集包micrometer。 micrometer是一个开源的Java监控指标采集库,用于收集和导出应用程序的指标数据。它可以与各种监控系统和组件集成,如Prometheus、Graphite、InfluxDB等,以便对应用程序的运行状况进行监控和分析。 micrometer提供了一组简单而强大的API,使开发人员可以轻松地定义和维护指标。它支持各种指标类型,如计数器、计时器、直方图和分布式汇总。开发人员可以使用这些指标来记录应用程序的性能、响应时间、错误率等关键指标。 使用micrometer,开发人员可以通过编写简单的代码来收集指标数据。他们可以选择将这些数据导出到不同的监控系统,以便进行实时监控和报警。此外,micrometer还提供了丰富的度量工具和可视化组件,帮助开发人员更好地理解和分析指标数据。 总之,micrometer是一个强大且易于使用的Java监控指标采集包,它提供了丰富的功能和灵活性,使开发人员能够更好地监控和管理他们的应用程序。无论是小型项目还是大型企业级应用程序,micrometer都是一个不错的选择。 ### 回答3: 是的,我知道Java的监控指标采集包micrometer。Micrometer是一个开源的度量工具库,专门用于收集和报告应用程序的指标数据。它为Java应用程序提供了一组简单而强大的API,可以轻松地将关键指标信息导出到各种监控系统中。 Micrometer的主要目标是提供一种统一的编程模型,可以轻松地将指标数据发送到各种不同的监控系统和策略中。它支持多种监控系统,如Prometheus、Graphite、InfluxDB和New Relic等。使用Micrometer,开发人员可以方便地收集应用程序中的关键性能指标,包括响应时间、错误率、请求量等,并将其实时报告给监控系统进行分析和可视化。 Micrometer还支持度量标准的细粒度定义,可以根据应用程序的需求定义自定义指标、标签和计量单位。它提供了一组简单易用的API,使开发人员可以轻松地在应用程序中添加指标收集的代码。 总的来说,Micrometer是一个功能强大且易于使用的Java监控指标采集包,它可以帮助开发人员监控和度量应用程序的性能,并将关键指标数据导出到各种监控系统中进行分析和可视化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值