2008-11-30 8 views
5

मैं ग्राफ़ प्रदर्शित करने के लिए डेटा संग्रहीत करने के लिए आरआरडीटोल का उपयोग कर रहा हूं। मैं आरआरडी द्वारा आरआरडी अपडेट करता हूं :: अद्यतन और जानकारी को फिर से लिखने का प्रयास करते समय यह विफल रहता है, इसका मतलब है कि अतीत में एक समय के लिए डेटा अपडेट करें (उदाहरण के लिए किसी ने सिस्टम टाइमर को वापस ले जाया है)। त्रुटि मैं मिलता है:मैं आरआरडीटोल के साथ डेटा कैसे अपडेट कर सकता हूं?

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) 

मैं हमेशा फिर से लिखने की अनुमति देना चाहते हैं, मैं यह कैसे कर सकते हैं?

उत्तर

1

आरआरडी दस्तावेज के अनुसार, उस टाइमस्टैम्प संख्या प्रत्येक अद्यतन के साथ बढ़ाना चाहिए। अपनी बाधाओं को देखते हुए, मैं आपके अपडेट दिनचर्या को संशोधित करता हूं ताकि अगर अपडेट विफल हो जाए, तो आप अपवाद को पकड़ते हैं और 'एन' पर सेट किए गए समय फ़ील्ड के साथ अपडेट को फिर से शुरू करते हैं। इससे RRDtool अद्यतन समय के रूप में वर्तमान समय का उपयोग करेगा।

वैकल्पिक रूप से, यदि आप कैच-एंड-रीट्री कोड से निपटना नहीं चाहते हैं, तो हमेशा समय अपडेट के रूप में 'एन' का उपयोग करने के लिए अपने अपडेट कोड को संशोधित करें - फिर अपडेट हमेशा काम करेगा।

आरआरडीटोल update command के लिए प्रलेखन पर त्वरित रूप से देखना उपयोगी हो सकता है।

3

rrdtool आपके इनपुट को आरआरडी फ़ाइल में नहीं लिखता है। यह आपके द्वारा दर्ज किए गए नमूने बल्कि नमूने के परिणामस्वरूप डेटापॉइंट्स को संग्रहीत करता है। तो rrdtool अद्यतन के लिए 'पुराना डेटा' प्रदान करना उसी तरह काम नहीं करेगा, क्योंकि आप कुछ खराब नोट्स को 'ठीक' करने के लिए आसानी से ध्वनि रिकॉर्डिंग में वापस नहीं जा सकते हैं।

स्पष्ट रूप से पुराने डेटा को बदलने के तरीके हैं, rrdtool में इसे करने का तरीका, आरडीआर फ़ाइल को xml में 'डंप' करना, सामग्री को संशोधित करना और इसे 'पुनर्स्थापित करना' है। नियमित आधार पर कुछ नहीं करना चाहेंगे।

3

मैं ऐसी स्थितियों में निम्न स्क्रिप्ट का उपयोग करें:

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

यह थोड़ा ... फ्रीकी, लेकिन मैं नहीं एक और स्वत: समाधान मिल सकता है कर रहा है।