5
A
回答
9
我發現做到這一點的最佳方法...
- 使用RRDTool Dump到RRD文件導出到XML。
- 打開XML文件,找到並編輯壞的數據。
- 使用RRDTool Restore恢復RRD文件。
2
如果你想避免寫作和XML文件,因爲這可能的編輯需要一些文件IO要求(根據你有多少壞數據都有),你也可以閱讀整個RRD到使用抓取和更新值內存-記憶。
我做了類似的任務使用python + rrdtool的我落得這樣做:
- 讀RRD內存在字典
- 字典中的固定值
- 刪除現有RRD文件
- 創建具有相同名稱的新rrd。
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 = 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,
爲我工作。希望它可以幫助別人。
0
唯一提出的是,究竟要編輯的是RobM。我嘗試了他的解決方案,它不適用於rrdtool 1.4.7
我的數據庫使用AVERAGE,MAX和MIN。它包含DERIVE,GAUGE和COMPUTED。間隔:秒(70),分鐘(70),小時(25),日(367)。 我的任務:刪除最後一部分(典型原因:時鐘移回)。
我應用了RobM的解決方案:更改爲新的結束時間,之後全部刪除。恢復的數據庫似乎是正常的。但它不接受新的增補。 我檢查了一個新創建的空數據庫。我發現NaN有70秒的記錄,分鐘和小時也一樣。
因此,我的工作解決方案 - 如果我在某段時間結束時刪除了記錄,我會在此期間添加相同數量的NaN記錄,並正確減少時間。例外 - 日常記錄,只有在不添加的情況下才會被刪除。 如果在刪除後期間變爲空白,我用NaN記錄填充它以結束到我的新結束時間(四捨五入到期間邊界)。
相關問題
- 1. rrdtool中的數據源
- 2. 從數據庫中刪除/刪除
- 3. 從表中刪除數據
- 4. 從MYSQL中刪除數據
- 5. 從AJAXREQUEST中刪除數據
- 6. 從數據庫中刪除
- 7. 從NSKeyedArchvier中刪除數據
- 8. 從數據庫中刪除
- 9. 從numpy.array中刪除數據
- 10. 從TCP流向RRDTool插入數據
- 11. 數據不從數據庫中刪除
- 12. Textarea從數據庫中刪除數據
- 13. 從數據庫中刪除數據
- 14. 從NeDB數據庫中刪除數據
- 15. 從數據庫中刪除數據
- 16. Android:從數據庫中刪除數據
- 17. 從數據庫中刪除數據
- 18. 從phpmyadmin數據庫中刪除數據
- 19. PHP從數據庫中刪除數據
- 20. 從UIViewController中刪除數據時,從導航堆棧中刪除
- 21. 從表中刪除後從數據庫中刪除ADF
- 22. RRDTOOL和自定義數據
- 23. backbone.js從數據庫刪除模型從視圖中刪除
- 24. 是否可以從網頁刪除數據但不從數據庫中刪除?
- 25. 從數據數組中刪除值
- 26. 從json數組中刪除數據
- 27. 從json數組中刪除數據
- 28. 從數據庫中刪除數據,但不從數據網格中刪除數據。 WPF
- 29. PHP從數據庫中刪除的字符串中刪除\
- 30. 從OleDB C刪除數據#
如果你開源解決方案,我敢打賭,你會幫助很多人! – mscccc 2012-10-03 14:04:54