2013-05-21 44 views
2

我在nagios中有一個powershell腳本,它使用內置的Windows netstat命令返回一個整數。命令如下:Nagios PNP4Nagios平均整數值?

$conns = nestat -na | select-string -pattern "ESTABLISHED" 
$NumberOfConnections = $conns.count 
$NumberOfConnections 

的輸出是一樣的東西:

123 

按預期工作。但是,當我繪製Nagios圖形並每隔三分鐘運行一次檢查時,結果將繪製爲像120.657或125.124這樣的pnp4nagios(它將數值平均爲浮點數,而不是繪製整數)。

有誰知道我怎麼能強迫的Nagios和PNP4Nagios RRDtool的繪圖功能的特定服務檢查,以不平均或圓形的結果?實際上,因爲它是一個整數,我根本不需要任何小數點。有任何想法嗎?

+0

您如何保存數據,以及如何將它提供給PNP4Nagios?在我看來,分隔符是問題... –

回答

0

首先,你應該檢查itsself通過檢查返回的perfdata - 應該像'key'=value以下有效perfdata規格。

然後拿個主意pnp4nagios模板如何工作 - 這取決於你的版本(0.6正在積極開發的),例如看進入:[1]

模板會被他們的檢查命令名稱默認爲擡頭(所以如果你沒有創建一個自定義的檢查,有可能是使用如default.php模板)。

根據您安裝pnp4nagios的方式,可以在$prefix/share/templates.dist下找到模板目錄 - 將您的模板放入$prefix/share/templates以防止它們在升級過程中丟失。現在將$prefix/share/templates.dist/default.php複製到$prefix/share/templates/<yourcheckcommandname>.php並開始編輯(確保web服務器的用戶可以打開它)。

你會看到,這只是在PHP代碼中創建一個呼叫rrdtool,附加串居多。關於你的問題:

  • 你不希望有AVG,但在你的傳說
  • 浮點格式不希望

當前值看着

$def[$KEY] = rrd::def  ("var1", $VAL['RRDFILE'], $VAL['DS'], "AVERAGE"); 
$def[$KEY] .= rrd::gradient("var1", "3152A5", "BDC6DE", rrd::cut($VAL['NAME'],16), 20); 
$def[$KEY] .= rrd::line1 ("var1", $_LINE); 
$def[$KEY] .= rrd::gprint ("var1", array("LAST","MAX","AVERAGE"), "%3.4lf%S".$VAL['UNIT']); 

在第一行中,您將var1定義爲「AVERAGE」。如果在繪製圖表時整合效果更好,請將其設置爲「最後」。

最後一行與gprintf如下printf語法,其中lf將與精度4和在前面(3.4)3號的雙[2] 更改%lf%d(整數)將可能與該圖例解決該問題。

您可以更改如下,例如,

$def[$KEY] = rrd::def  ("var1", $VAL['RRDFILE'], $VAL['DS'], "LAST"); 
$def[$KEY] .= rrd::gradient("var1", "3152A5", "BDC6DE", rrd::cut($VAL['NAME'],16), 20); 
$def[$KEY] .= rrd::line1 ("var1", $_LINE); 
$def[$KEY] .= rrd::gprint ("var1", array("LAST","MAX","AVERAGE"), "%d %S".$VAL['UNIT']); 

甚至還有對這些模板進一步的可能性 - 就像縮放Y軸,等等 - 這只是rrdtool語法即可。

要打印Nagios/Icinga Core如何將perfdata發送到PNP4Nagios的最新值,您還可以使用另一個技巧 - pnp存儲其他數據,這些數據不適合rrd存儲在它自己的*.xml文件中。這些xml文件隨即由process_perfdata.pl運行的每個正常rrd更新進行更新。 其中之一是「ACT」(檢查[1]),可以在第一個數據源上訪問,就像模板代碼中的$ACT[1]一樣,然後作爲註釋字符串傳遞給rrdtool調用。

$def[$KEY] .= "COMMENT:\"Current $ACT[$key]\\n\" ";" 

[1] http://docs.pnp4nagios.org/pnp-0.6/tpl

[2] http://www.cdf.toronto.edu/~ajr/209/notes/printf.html

+0

感謝您的詳細解答。不幸的是,將DS值從平均值改爲LAST並不奏效,也沒有將%lf改爲%d。當我將AVERAGE更改爲LAST時,出現錯誤:「錯誤:RRD不包含與所選CF匹配的RRA」。如果我將它保持爲平均值,但將%3.4lf更改爲%d,它會在'%d%s Last'中顯示「STDOUT => ERROR:GPRINT的格式不正確。我應該提到這是從default.php複製的我覺得它很接近,現在只是一個語法或格式化問題,謝謝你的幫助。 –

+0

Tbh我沒有測試它,只是收集了一些樣本。一般來說,你應該知道rrdtool printf語法是如何工作的。好吧,如果LAST不能解決問題,那麼使用$ ACT [1]作爲COMMENT然後在我的自定義模板中使用當前值。 – dnsmichi

0

注意to specify LAST in the .php template as described in the other answer,你需要首先創建LAST作爲pnp4nagios整合功能文件 「rra.cfg」。該文件中應該有AVERAGE,MIN和MAX的現有值。

在我的系統中該文件不存在,但我確實有rra.cfg-sample。我複製/usr/local/pnp4nagios/etc/rra.cfg-sample/usr/local/pnp4nagios/etc/rra.cfg。然後我編輯/usr/local/pnp4nagios/etc/rra.cfg補充:

RRA:LAST:0.5:1:2880 
RRA:LAST:0.5:5:2880 
RRA:LAST:0.5:30:4320 
RRA:LAST:0.5:360:5840 

注意,編號對應於60秒我步進值(我查詢每分鐘),所以你應該在你的rra.cfg文件相匹配的現有值。

然後,您必須刪除現有的RRD文件並讓pnp4nagios重新創建它們。

新的RRD文件現在應該有一個額外的「cf」(合併功能)。新的RRD文件也將增大25%。

[server]# rrdtool dump Interface_Drops_-_MET_ATL1_VIRL-FLAT.rrd | grep cf 

      <cf> AVERAGE </cf> 
      <cf> AVERAGE </cf> 
      <cf> AVERAGE </cf> 
      <cf> AVERAGE </cf> 
      <cf> MAX </cf> 
      <cf> MAX </cf> 
      <cf> MAX </cf> 
      <cf> MAX </cf> 
      <cf> MIN </cf> 
      <cf> MIN </cf> 
      <cf> MIN </cf> 
      <cf> MIN </cf> 
      <cf> LAST </cf> 
      <cf> LAST </cf> 
      <cf> LAST </cf> 
      <cf> LAST </cf>