在小米开发Falcon期间,经常要和rrdtool打交道。把了解到的一些 系统原理、使用经验&教训记录在这里。不定期更新。
fetch时RRA如何选择
这里讨论的是rrdtool的lib库接口,不是cmdline接口。rrdtool.fetch()时,如何选择RRA?
选择RRA的次序,如下(排在最前的,优先选择):
- 如果存在 时间完全匹配 的RRA,则选择 归档精度最高 的那个RRA;
- 如果不存在 时间完全匹配 的RRA,则选择 匹配时间段最长 的RRA; 如果 匹配时间段最长 的RRA有多个,选择其中 归档精度最高 的RRA。
关键因素: 时间匹配的长度,归档精度。时间匹配的长度 优先级高于 归档精度。
eg. 假设数据上报周期为60s
RRA1(1, 60) // 原始数据,保存60个点,覆盖的时间段[0min, 60min)
RRA2(5, 24) // 5个点归为1个,保存24个点,覆盖的时间段[5min, 2h)
RRA3(30, 20) // 30个点归为1个,保存20个点,覆盖的时间段[30min, 10h)
now()=`12:00:00`, 数据已存储到了12:00:00这个时刻;假设数据在每个周期的起点被上报。
fetch([11:01, 12:00]) RRA1
fetch([10:59, 12:00]) RRA2
fetch([10:01, 12:00]) RRA2
fetch([10:59, 11:01]) RRA2
fetch([09:59, 12:00]) RRA3
fetch([02:01, 12:00]) RRA3
fetch([01:59, 12:00]) RRA3
fetch([00:00, 12:00]) RRA3