RRD 修改舊資料數值

RRD 是十分好用的統計工具,很多伺服的監測也會使用 RRD。

今天發現 RRD 內的一組數據紀錄出錯,但 RRD 內建並沒有修改舊數據的功能,需要將 RRD 資料庫備份成 XML 檔,修改 XML 檔後,再復原到資料庫,以下是修改的方法,在這裡記錄一下。

1. 例如要修改數據的 RRD 檔是 /usr/local/rrd/file.rrd, 先用 rrdtool 的 dump 功能,將 RRD 的資料匯出成 XML 檔:

# rrdtool dump /usr/local/rrd/file.rrd file-backup.xml

2. 然後直接用 vi 剛剛建立的 XML 檔:

# vi file-backup.xml

例如要找的資料時間是 2020-05-18 08:00:00,找出這個時間字串的一行

3.每一個數值會用 分隔,次序跟建立 RRD 檔時的順序一樣。但仔細一看那些數值都看不懂的,因為 RRD 會用科學記數法儲存,例如像這樣 5.6206361067e+01。


要轉換這個數值,可以用 python 實現。例如上面的 5.6206361067e+01,用以下寫法:

執行後可以看到結果是 56, 例如我想將數值改成 60,python 可以這樣寫:

執行後可以得出結果是 6.000000e+01,開啟上面建立的 file-backup.xml,將這個數值記錄在正確的位置。

為了方便修改,用 Python 寫了這個小程式,可以將數值由十進制及科學記數間轉換:

將上面 Script 儲存後,使用方法是這樣:

$ script.py 123
1.230000e+02

上面會將 123 轉換成科學記數法,如果輸入科學記數法,會回傳十進制數值:

$ script.py 1.230000e+02
123

4. 修改後 XML 檔後,用 rrdtool 的 restore 功能復原數據:

先將原來的 RRD 資料檔搬到其他位置:

# mv /usr/local/rrd/file.rrd /usr/local/rrd/file.rrd.bak

復原數據:

# rrdtool restore file-backup.xml /usr/local/rrd/file.rrd

這樣便完成了,當下次用 rrdtool graph 更新 RRD 圖片時,便會產生正確的統計圖。



你可能感興趣的內容:

Leave a Reply