2014-03-28 105 views
1

我試圖分析服務器羣集上的錯誤頻率以查找趨勢。我解析了日誌以提取與時間戳有關的錯誤。 (我的數據當前格式爲%b.%d.%H:%M:%S $HOSTNAME,但轉換時間戳不是問題。)我想在圖表上繪製這些事件。我從來沒有使用過gnuplot,所以如果這不是一個好的解決方案,請隨時提出其他建議。使用gnuplot繪製事件頻率

我看到的所有gnuplot示例(以及其他圖形解決方案)似乎都使用定期檢索的數據。每30秒CPU使用率,每小時溫度等。但對於我的情況,我可能在上午8點36分有300個錯誤,然後在一天的其餘時間內沒有錯誤,或者一整天不變,或者......誰知道?我只是想獲得更好的可視化。

我認爲最終結果是一個包含三條線圖的曲線圖,每個節點一個節點,顯示錯誤頻率(每分鐘可能?)。

我意識到這裏有更大規模的解決方案;我在其他項目上使用Graylog,Logstash和Kibana。但這是一次性的,還有其他一些我需要這樣的情況;我想實際投入一些時間來學習gnuplot。但現在,我只是想克服這個駝峯。

謝謝。

+0

我已經成功地破解了一些東西,但這樣做是可怕的。我使用嵌套for循環來'grep -c'文件以10分鐘的塊計數,然後將結果保存爲每個節點單獨的文件。我能夠使用該數據在gnuplot中生成圖形。 –

回答

3

您可以使用smooth frequency參數繪製頻率。用一個單一點代替所有相同的x值,其中y值是所有y值的總和。

爲了得到例如5個鐘座,你必須斌的x數據:

width = 5*60 # five minutes 
bin(x) = (timecolumn(x)/width+0.5)*width 
set boxwidth 0.9*width abs 
set style fill solid noborder 

set timefmt '%b.%d.%H:%M:%S' 
set xdata time 
set yrange [0:*] 

host='hostname' 
plot 'file' using (bin(1)):(strcol(2) eq host ? 1 : 0) smooth frequency with boxes 

這工作正常與boxes繪圖風格,但是看起來怪與lines,因爲你沒有得到數據的重採樣到均勻5分鐘網格。

對於三大主機,你可以遍歷該如下:

.... 
hosts='host1 host2 host3' 
plot for [h in hosts] 'file' using (bin(1)):(strcol(2) eq host ? 1 : 0) smooth frequency with boxes title h 

你可以做的過濾也與外部的工具,像grep

hosts = 'host1 host2 host3' 
cmd = '< grep ''\b%s\b'' file' 
plot for [h in hosts] sprintf(cmd, h) using (bin(1)):(1) smooth frequency with boxes title h 

爲了重新採樣數據,並獲得適當的線圖,也就是說,它不會通過插入兩個相隔一天的錯誤突發來扭曲數據,但它們之間沒有任何事情發生,您需要一個外部工具或腳本。