2017-04-07 49 views
0

我正在繪製包含來自多個rrd數據文件的變量的圖。我還會在圖上顯示每個變量的最後一個值。當我使用時,例如「CDEF:A = a,UN,0,a,IF,8,」,然後打印圖表上變量A的最後一個值,取決於我何時加載圖表,最後一個值即使rrd數據文件中最後一次更新的值不是0,A也會變爲0.我正在使用rrdtool 1.4.8。當我使用「CDEF:A = a,8,」定義A時,這不會發生。當使用IF和UN將未知值設置爲0時,有時在rrd圖中最後的值變爲0

回答

0

這是因爲您正在使用多個RRD文件,並且它們的更新和查詢之間存在爭用條件。我看到這種情況發生在通過MRTG數據生成的「Routers2」圖表中,並且該程序添加了特殊計算來避免它。

當您運行圖形時,最後一點是基於當前時間的。但是,我們當前所在的時間段可能未在其中一個源RRD文件中更新。

例如,假設數據每5分鐘更新一次。

  • 11:59,RRD文件A被更新,而11點55桶現已完成。
  • 在12:01,RRD文件B已更新,現在已完成12:00存儲桶。
  • 在12:03,調用函數。圖表的末尾設置爲12:00,因爲這是最新的可用數據。
  • 但是,對於RRD文件A,最新的可用數據是11:55,因爲我們尚未進行12:04更新。所以,圖中的最後一個數據點是unknown

這就是爲什麼偶爾會在您的某個數據集的末尾出現未知數的原因。這意味着源數據的RRD在當前時間窗口結束時正在更新。

如果您沒有未知測試,那麼該圖形將不會顯示有問題的點(如未知點不繪製)。所以,如果仔細觀察,您會看到圖中的線條早先結束一個像素。

以編程方式避免這種情況的一種方法是獲取所有組件RRD文件的lastupdate時間,然後使用這些中最早的時間作爲圖形上的結束時間。這是routers2軟件避免這個問題的方式。

相關問題