从RRDTool的删除数据(Remove data from RRDTool)

2019-09-16 17:23发布

我有RRDTool的创建了几个图表,期间的几个小时的时间内收集的错误数据。

我怎么能在这段时间内,使其不再显示删除从RRD的数据?

Answer 1:

最好的方法我发现做到这一点...

  1. 使用RRDTool的转储到RRD文件导出到XML。
  2. 打开XML文件,找到并修改错误数据。
  3. 恢复使用RRD文件的RRDTool恢复 。


Answer 2:

我有我想要的地方丢弃我RRDtool的数据库的最近几个小时了类似的问题,所以我写了一个快速脚本来做到这一点(的道歉非常规的变量名 - 编码从工作作风继承,叹气):

#!/usr/bin/env python2                                                                                                                                                                                 
"""                                                                                                                                                                                                    
Modify XML data generated by `rrdtool dump` such that the last update was at                                                                                                                           
the unixtime specified (decimal). Data newer than this is simply omitted.                                                                                                                              

Sample usage::                                                                                                                                                                                         

    rrdtool dump foo.rrd \
       | python remove_samples_newer_than.py 1414782122 \
       | rrdtool restore - foo_trimmed.rrd                                                                                          
"""                                                                                                                                                                                                    

import sys                                                                                                                                                                                             

assert sys.argv[1:], "Must specify maximum Unix timestamp in decimal"                                                                                                                                  

iMaxUpdate = int(sys.argv[1])

for rLine in iter(sys.stdin.readline, ''):                                                                                                                                                             
    if "<lastupdate>" in rLine:                                                                                                                                                                        
        # <lastupdate>1414782122</lastupdate> <!-- 2014-10-31 19:02:02 GMT -->                                                                                                                         
        _, _, rData = rLine.partition("<lastupdate>")                                                                                                                                                  
        rData, _, _ = rData.partition("</lastupdate")                                                                                                                                                  
        iLastUpdate = int(rData)                                                                                                                                                                       
        assert iLastUpdate < iMaxUpdate, "Last update in RRD older than " \                                                                                                                            
                                    "the time you provided, nothing to do"                                                                                                                             
        print "<lastupdate>{0}</lastupdate>".format(iMaxUpdate)                                                                                                                                        
    elif "<row>" in rLine:                                                                                                                                                                             
        # <!-- 2014-10-17 20:04:00 BST / 1413572640 --> <row><v>9.8244774011e+01</v><v>8.5748587571e-01</v><v>4.2046610169e+00</v><v>9.3016101695e+01</v><v>5.0000000000e-02</v><v>1.6652542373e-01</  v><v>1.1757062147e+00</v><v>1.6901226735e+10</v><v>4.2023108608e+09</v><v>2.1457537707e+08</v><v>3.9597816832e+09</v><v>6.8812800000e+05</v><v>3.0433198080e+09</v><v>6.0198912250e+06</v><v>2.        0000000000e+00</v><v>0.0000000000e+00</v></row>                                                                                                                                                        
        rData, _, _ = rLine.partition("<row>")                                                                                                                                                         
        _, _, rData = rData.partition("/")                                                                                                                                                             
        rData, _, _ = rData.partition("--")                                                                                                                                                            
        rData = rData.strip()                                                                                                                                                                          
        iUpdate = int(rData)                                                                                                                                                                           
        if iUpdate < iMaxUpdate:                                                                                                                                                                       
            print rLine,                                                                                                                                                                               
    else:                                                                                                                                                                                              
        print rLine,                                                                                                                                                                                   

为我工作。 希望它可以帮助别人。



Answer 3:

如果你想避免写作和XML文件的编辑,因为这可能需要一些文件IO要求(根据你有多少坏数据都有),你也可以阅读整个RRD到使用抓取和内存更新值存储。

我做了类似的任务使用python + rrdtool的我落得这样做:

  1. 读取内存RRD在字典
  2. 在字典中固定值
  3. 删除现有RRD文件
  4. 创建具有相同名称的新RRD。


Answer 4:

所提出的仅是谁,究竟编辑,是ROBM。 我想他的解决方案,并没有对我的rrdtool 1.4.7工作

我的数据库使用AVERAGE,MAX和MIN。 它包含DERIVE,仪表和计算机。 间隔:第二(70),分(70),小时(25),日(367)。 我的任务:删除一些最后一部分(典型的原因:时钟搬回)。

我申请ROBM的解决方案:改变我的新的结束时间,后全部删除。 还原的数据库似乎是正常的。 但它并没有接受新的补充。 我研究了新创建的空数据库。 而且我在里面发现了70条NaN的第二记录,同为分钟和小时。

所以,我的工作解决方案 - 如果我在某些期末删除记录,我想补充相同数量的NaN的记录在这个时期开始,用正确递减倍。 例外 - 日常记录,他们只是删除不加。 如果时期的删除后变成空,我与南纪录结束我的新的结束时间(四舍五入到的周期边界)填充它。



文章来源: Remove data from RRDTool
标签: rrdtool rrd