在使用了collectd和InfluxDB一段时间之后,我意识到正常运行时间每次都作为单个数据点存储,例如导致测量结果如下:
1469552552940296000 localhost uptime 426568
1469552931893217000 localhost uptime 426947
1469552991889480000 localhost uptime 427007
1469553051889521000 localhost uptime 427067
1469553111890071000 localhost uptime 427127
1469553171889512000 localhost uptime 427187
1469553231889512000 localhost uptime 427247
这对我来说似乎效率低下,因为它有点多余。鉴于上次测量,我可以计算所有其他测量值,那么为什么要将它们存储起来呢?我现在正在研究保留策略,但我不太确定如何在这里应用它们。对于这类数据,什么是好策略?
我绝对希望在系统关闭时获取信息,所以基本上我想存储“开始”点和最新的uptime_value。介于两者之间的一切都是多余的。
答案 0 :(得分:0)
这里要做的正确的事情是使用连续查询和保留策略。我不知道你只能存储第一个和最后一个点,但你绝对可以。
连续查询将用于将所有数据下采样到单个点。保留策略将用于删除旧数据。
它看起来像这样
CREATE RETENTION POLICY myrp on mydb DURATION 1d REPLICATION 1
然后有类似以下连续查询的内容
CREATE CONTINUOUS QUERY mycq on mydb BEGIN
SELECT max(uptime) FROM mymeasurement GROUP BY time(10m), *
END
话虽如此,压缩后,每个点在磁盘上占用的字节数不会超过2.5个字节。我可能不会太担心效率。