2008-11-30 37 views
5

Tôi đang sử dụng RRDtool để lưu trữ dữ liệu để hiển thị biểu đồ. Tôi cập nhật RRD bằng RRD :: cập nhật và điều này không thành công khi cố gắng viết lại thông tin, có nghĩa là cập nhật dữ liệu cho một thời gian trong quá khứ (ví dụ: ai đó đã di chuyển bộ hẹn giờ hệ thống trở lại). Lỗi tôi nhận được là:Làm cách nào để cập nhật dữ liệu bằng RRDtool?

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) 

Tôi muốn luôn cho phép viết lại, làm cách nào để thực hiện việc này?

Trả lời

1

Theo tài liệu RRD, dấu thời gian đó số phải tăng với mỗi lần cập nhật. Với các ràng buộc của bạn, tôi sẽ sửa đổi thường trình cập nhật của bạn để nếu cập nhật thất bại, bạn bắt ngoại lệ và làm lại bản cập nhật với trường thời gian được đặt thành 'N'. Điều đó sẽ làm cho RRDtool sử dụng thời gian hiện tại làm thời gian cập nhật.

Ngoài ra, nếu bạn không muốn xử lý mã bắt và thử lại, chỉ cần sửa đổi mã cập nhật của bạn để luôn sử dụng 'N' làm giá trị thời gian - khi đó cập nhật sẽ luôn hoạt động.

Có thể hữu ích khi xem nhanh tài liệu cho RRDtool update command.

3

rrdtool không ghi đầu vào của bạn vào tệp rrd. Nó thay vì mẫu những gì bạn nhập và sau đó lưu trữ các datapoints kết quả. Vì vậy, việc cung cấp 'dữ liệu cũ' để cập nhật rrdtool sẽ không hoạt động theo cùng một cách, vì bạn không thể dễ dàng bỏ qua trong bản ghi âm để 'sửa' một vài ghi chú xấu.

Rõ ràng có nhiều cách để thay đổi dữ liệu cũ, cách thực hiện việc này trong rrdtool, là 'đổ' tệp rrd vào xml, sửa đổi nội dung và 'khôi phục' nội dung đó. Không phải thứ gì đó muốn làm một cách thường xuyên.

3

tôi sử dụng kịch bản sau đây trong tình huống như vậy:

#!/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" 

Nó một chút ... freaky, nhưng tôi không thể tìm thấy một giải pháp tự động.

Các vấn đề liên quan