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.每一個數值會用
要轉換這個數值,可以用 python 實現。例如上面的 5.6206361067e+01,用以下寫法:
1 2 3 |
#!/usr/bin/python print ("%d"% 5.6206361067e+01) |
執行後可以看到結果是 56, 例如我想將數值改成 60,python 可以這樣寫:
1 2 3 |
#!/usr/bin/python print ("%e"% 60) |
執行後可以得出結果是 6.000000e+01,開啟上面建立的 file-backup.xml,將這個數值記錄在正確的位置。
為了方便修改,用 Python 寫了這個小程式,可以將數值由十進制及科學記數間轉換:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#!/usr/bin/python import sys ### define which log file shoue be read if len(sys.argv) == 1: print "ERRPR: Please input number!" exit() num = sys.argv[1]; try: float(num) except ValueError: print "ERROR: " + num + " is not a number!" exit() if num.find("+") >= 0: print ("%d"% float(num)) else: print ("%e"% float(num)) |
將上面 Script 儲存後,使用方法是這樣:
$ script.py 123
1.230000e+02
1.230000e+02
上面會將 123 轉換成科學記數法,如果輸入科學記數法,會回傳十進制數值:
$ script.py 1.230000e+02
123
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 圖片時,便會產生正確的統計圖。
你可能感興趣的內容: