簡體   English   中英

RRDTool 數據值(例如最大值)在不同的時間分辨率下是不同的

[英]RRDTool data values (e.g. max value) are different in different time resolutions

目前我正在嘗試使用 RRDTool。 我知道,選擇的時間段越長,准確度就越低。 但我想我可以通過我的數據源設置繞過這個。

例如我家的溫度和濕度,1h:

1小時分辨率

現在分辨率為 1d:

一維分辨率

如您所見,最大值有很大差異。 藍線的價值。

我使用以下值創建了我的數據源和檔案:

"rrdtool create temp.rrd --step 30",
"DS:temp:GAUGE:60:U:U",
"DS:humidity:GAUGE:60:U:U",
"RRA:AVERAGE:0.5:1:1051200",
"RRA:MAX:0.5:1:1051200",
"RRA:MIN:0.5:1:1051200",

我認為 1051200 (1 年 = 31536000 / 30 s (resoulution) = 1051200) 對於保存一年的每個值是正確的,並且不需要插值。

即使分辨率發生變化(例如最大濕度 (Luftfeuchtigkeit) 為 99.9%),是否也能獲得准確的顯示值?

以下是我對圖像創建的價值觀:

"--start" => "-1h", (-1d etc-)
"--title" => "Haustemperatur",
"--vertical-label" => "°C / % RLF",
"--width" => 800,
"--height" => 600,
"--lower-limit" => "-5",
"DEF:temperatur=$rrdFile:temperatur:LAST",
"DEF:humidity=$rrdFile:humidity:LAST",
"LINE1:temperatur#33CC33:Temperatur",
"GPRINT:temperatur:LAST:\t\tAktuell\: %4.2lf °C",
"GPRINT:temperatur:AVERAGE:Schnitt\: %4.2lf °C",
"GPRINT:temperatur:MAX:Maximum\: %4.2lf °C\j",
"LINE1:humidity#0000FF:Relative Luftfeuchtigkeit",
"GPRINT:humidity:LAST:Aktuell\: %4.2lf %%",
"GPRINT:humidity:AVERAGE:Schnitt\: %4.2lf %%",
"GPRINT:humidity:MAX:Maximum\: %4.2lf %%\j",

感謝您的幫助和任何建議。

PS 我正在使用一個庫來生成圖形和數據庫,請不要對可能的語法錯誤感到驚訝。

您的問題是您導致值在圖形時間動態匯總,但沒有正確指定要使用的匯總函數。 您的第二張圖顯示了間隔中最后一個的最大值,而不是真正的最大值。

這個配置有幾個問題需要解釋:

首先,您的 RRD 是使用 3 個 RRA 定義的,其中 1cdp=1pdp 和不同的合並函數(AVG、MIN、MAX)。 這意味着它們在功能上是相同的,但它們不會為您節省任何繪圖時間,因為它們沒有為您做任何預匯總! 您絕對應該考慮只使用其中一個(可能是 AVG)並以較低的分辨率添加其他的,以在您有更大的時間窗口時幫助加快繪圖速度。

其次,您需要指定即時匯總功能。 繪制圖形時,RRDTool 將根據您的 DEF 線計算出要使用的最佳 RRA,並將即時執行所需的任何其他合並。 如果唯一可用的 RRA 粒度太高,這可能需要很長時間。

您的圖形請求使用DEF:temperatur=$rrdFile:temperatur:LAST但您實際上沒有LAST類型的 RRA,因此 RRDTool 將獲取最后一個平均值。 您的 RRA 數據點的間隔為 30 秒,但您的第二張圖每像素(大約)5 分鍾,這意味着 RRDTool 需要從 RRA 獲取 10 個條目,並打印最后一個。 查看頂部圖表中的數據,該間隔中的最后一個值似乎是 66,盡管之前的值是 100。

所以你有一個選擇。 您希望圖表顯示時間段的平均值、最大值還是兩者? 您希望底部的數字顯示平均值的最大值,還是所有內容的最大值?

例如

"DEF:temperatur=$rrdFile:temperatur:AVERAGE",
"DEF:humidity=$rrdFile:humidity:AVERAGE",
"DEF:temperaturmax=$rrdFile:temperatur:MAX;reduce=MAX",
"DEF:humiditymax=$rrdFile:humidity:MAX;reduce=MAX",
"LINE1:temperatur#33CC33:Temperatur",
"LINE1:temperaturmax#66EE66:Maximum Temperatur",
"GPRINT:temperatur:LAST:\t\tAktuell\: %4.2lf °C",
"GPRINT:temperatur:AVERAGE:Schnitt\: %4.2lf °C",
"GPRINT:temperaturmax:MAX:Maximum\: %4.2lf °C\j",
"LINE1:humidity#0000FF:Relative Luftfeuchtigkeit",
"LINE1:humiditymax#3333FF:Maximum Luftfeuchtigkeit",
"GPRINT:humidity:LAST:Aktuell\: %4.2lf %%",
"GPRINT:humidity:AVERAGE:Schnitt\: %4.2lf %%",
"GPRINT:humiditymax:MAX:Maximum\: %4.2lf %%\j",

在這種情況下,我們為最大數據集定義了一個單獨的DEF ,這樣即使在合並之后我們也始終可以獲得最高值。 這也用於GPRINT以便我們獲得 MAX 的 MAX 而不是 AVERAGE 的 MAX。 最大值線現在與平均線分開繪制,以便我們可以看到任何數據匯總的效果 - 這些線將以高分辨率聚集在一起,但隨着時間窗口的擴大和分辨率的降低而分開。

DEF設置為強制用於最大值的任何匯總函數為 MAX 而不是 AVG,因此我們可以確保獲得最大值而不是最大值的平均值。

我們還使用 AVERAGE 而不是 LAST,以便在匯總后獲得更有意義的數據。 請注意,如果我們願意,我們也可以為LAST使用單獨的DEF ,盡管它不太有用。

請注意,如果您希望生成超過幾天的圖表,您絕對應該考慮為 AVERAGE 和 MAX 添加一些較低分辨率的 RRA,否則圖表生成會非常緩慢。 RRDTool 的設計意圖是數據將隨着時間的推移匯總,而不是(如在傳統數據庫中)每個樣本保持原樣。 因此,除非您確實需要將 30 秒分辨率的數據保存一整年,否則您可能更願意將這些高分辨率數據僅保存一周,然后使用單獨的 RRA,將分辨率提高到 1 小時並保存更長時間。 許多人保持30s 2天,然后30min-summary 2周,2h-summary 2個月,然后1day-summary 2年。

有關詳細信息,請參閱RRDTool 手冊頁

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM