二次开发 - 修改绘图曲线精度

优质
小牛编辑
127浏览
2023-12-01

修改绘图曲线精度

默认的,Open-Falcon只保存最近12小时的原始监控数据,12小时之后的数据被降低精度、采样存储。

如果默认的精度不能满足你的需求,可以按照如下步骤,修改绘图曲线的存储精度。

第一步,修改graph组件的RRA,并重新编译graph组件

graph组件的RRA,定义在文件 graph/rrdtool/rrdtool.go中,默认如下:

  1. // RRA.Point.Size
  2. const (
  3. RRA1PointCnt = 720 // 1m一个点存12h
  4. RRA5PointCnt = 576 // 5m一个点存2d
  5. // ...
  6. )
  7. func create(filename string, item *cmodel.GraphItem) error {
  8. now := time.Now()
  9. start := now.Add(time.Duration(-24) * time.Hour)
  10. step := uint(item.Step)
  11. c := rrdlite.NewCreator(filename, start, step)
  12. c.DS("metric", item.DsType, item.Heartbeat, item.Min, item.Max)
  13. // 设置各种归档策略
  14. // 1分钟一个点存 12小时
  15. c.RRA("AVERAGE", 0.5, 1, RRA1PointCnt)
  16. // 5m一个点存2d
  17. c.RRA("AVERAGE", 0.5, 5, RRA5PointCnt)
  18. c.RRA("MAX", 0.5, 5, RRA5PointCnt)
  19. c.RRA("MIN", 0.5, 5, RRA5PointCnt)
  20. // ...
  21. return c.Create(true)
  22. }

比如,你只想保存90天的原始数据,可以将代码修改为:

  1. // RRA.Point.Size
  2. const (
  3. RRA1PointCnt = 129600 // 1m一个点存90d,取值 90*24*3600/60
  4. )
  5. func create(filename string, item *cmodel.GraphItem) error {
  6. now := time.Now()
  7. start := now.Add(time.Duration(-24) * time.Hour)
  8. step := uint(item.Step)
  9. c := rrdlite.NewCreator(filename, start, step)
  10. c.DS("metric", item.DsType, item.Heartbeat, item.Min, item.Max)
  11. // 设置各种归档策略
  12. // 1分钟一个点存 90d
  13. c.RRA("AVERAGE", 0.5, 1, RRA1PointCnt)
  14. return c.Create(true)
  15. }

第二步,清除graph的历史数据

清除已上报的所有指标的历史数据,即删除所有的rrdfile。不删除历史数据,已上报指标的精度更改将不能生效。

第三步,重新部署graph服务

编译修改后的graph源码,关停原有的graph老服务、发布修改后的graph。

只需要修改graph组件、不需要修改Open-Falcon的其他组件,新的精度就能生效。你可以通过Dashboard、Screen来查看新的精度的绘图曲线。

注意事项:

修改监控绘图曲线精度时,需要:

  • 修改graph源代码,更新RRA
  • 清除graph的历史数据。不删除历史数据,已上报指标的精度更改将不能生效
  • 除了graph之外,Open-Falcon的其他任何组件 不需要被修改
  • 修改RRA后,可能会出现”绘图曲线点数过多、浏览器被卡死”的问题。请合理规划RRA存储的点数,或者调整绘图曲线查询时的时间段选择。