簡體   English   中英

如何使用RRDtool更新數據?

[英]How can I update data with RRDtool?

我正在使用RRDtool來存儲用於顯示圖形的數據。 我通過RRDs :: update更新RRD,這在嘗試重寫信息時失敗,意味着過去更新數據一段時間(例如有人將系統計時器移回)。 我得到的錯誤是:

ERROR: Cannot update /opt/dashboard/rrd/Disk/192.168.120.168_disk_1.rrd with 
'1228032301:24:24' illegal attempt to update using time 1228032301 when last 
update time is 1228050001 (minimum one second step)

我想總是允許重寫,我該怎么做?

rrdtool不會將您的輸入寫入rrd文件。 它會對您輸入的內容進行采樣,然后存儲生成的數據點。 因此,為rrdtool更新提供“舊數據”將無法以相同的方式工作,因為您無法輕松跳回錄音以“修復”一些不良注釋。

顯然有一些方法可以改變舊數據,rrdtool中的方法是將rrd文件“轉儲”到xml,修改內容並“恢復”它。 不是人們想定期做的東西。

在這種情況下我使用以下腳本:

#!/bin/sh
rrdtool dump "$1" | perl -ne 'BEGIN {$t=`date +%s`; chomp($t);} $a=$_; if ($a =~ /lastupdate.\d+..lastupdate/) { $a =~ s/(lastupdate.)\d+(..lastupdate)/$1$t$2/; } print $a' | rrdtool restore -f - "$1"

這有點......怪異,但我找不到另一種自動解決方案。

根據RRD文檔,每次更新時必須增加時間戳編號。 鑒於您的約束,我將修改您的更新例程,以便在更新失敗時捕獲異常並重新執行更新,並將時間字段設置為“N”。 這將使RRDtool使用當前時間作為更新時間。

或者,如果您不想處理catch-and-retry代碼,只需修改您的更新代碼以始終使用“N”作為時間值 - 然后更新將始終有效。

快速查看RRDtool update命令的文檔可能會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM