2012-06-29 46 views
1

我遇到Nagiosgraph問題。我創建了一個Nagios的檢查,監視通過SNMP服務器/工作站和檢查的輸出上的流量是一個很長的字符串,看起來像這樣:Nagiosgraph rrd文件未創建(可能是因爲映射文件)

OK - traffmon eth0:incoming:170KB:outgoing:1606KB eth1:incoming:1576KB:outgoing:170KB eth2:incoming:156:outgoing:0|lo;incoming;25;outgoing;25 tunl0;incoming;0;outgoing;0 gre0;incoming;0;outgoing;0 sit0;incoming;0;outgoing;0 eth0;incoming;170KB;outgoing;1606KB eth1;incoming;1576KB;outgoing;170KB eth2;incoming;156;outgoing;0 

我感興趣的是前三個接口,它們是爲什麼我已經分離爲eth0,eth1的,ETH2從整個字符串接口(這是我認爲的性能數據),我也跟着上http://www.novell.com/coolsolutions/feature/19843.html的指示,我在我的service.cfg

define serviceextinfo{ 
    host_name    workstation 
    service_description  Throughput Monitor 
    action_url    /nagiosgraph/cgi-bin/show.cgi?host=$HOSTNAME$&service=$SERVICEDESC$&db=eth0,incoming,outgoing,&geom=500x100&rrdopts%3D-l%200%20-u%2010000%20-t%20Traffic 
    } 

,並在我的地圖文件我寫了這個以匹配對我感興趣的東西:

/output:.*traffmon ([0-9]+), ([0-9]+), ([0-9]+), ([0-9]+), ([0-9]+), ([0-9]+), ([0-9]+), ([0-9]+), ([0-9]+)/ 
    and push @s, [ 'eth0', 
      ['incoming', 'GAUGE', $2], 
      ['outgoing', 'GAUGE', $3] ], 
     [ 'eth1', 
      ['incoming', 'GAUGE', $5], 
      ['outgoing', 'GAUGE', $6] ], 
     [ 'eth2', 
      ['incoming', 'GAUGE', $8], 
      ['outgoing', 'GAUGE', $9] ]; 

我想創建兩個列(傳入,傳出)的三個表(eth0,eth1,eth2),然後從中嘗試很好地表示它們。問題是通常我的rrd文件是自動創建的,但爲了檢查rrd文件夾中工作站名稱的文件夾沒有被創建,也沒有.rrd文件,我感覺它有一些事情要做與地圖文件,也許匹配不起作用或什麼(我說這是因爲我現在不用Perl)。任何建議表示讚賞。謝謝

+0

你的正則表達式不匹配輸入字符串:http://rubular.com/r/PAiivtxnEJ – simbabque

回答

1

你可以試試這個正則表達式:

/traffmon eth0:incoming:(\d+)(?:KB):outgoing:(\d+)(?:KB) eth1:incoming:(\d+)(?:KB):outgoing:(\d+)(?:KB) eth2:incoming:(\d+):outgoing:(\d+)/ 

您可以測試它rubular:http://rubular.com/r/vj7VXwDPPU


我不熟悉你的Nagios系統是如何工作的,但如果有空間更多的Perl代碼,你也可以做這樣的事情:

my $res = 'OK - traffmon eth0:incoming:170KB:outgoing:1606KB eth1:incoming:1576KB:outgoing:170KB eth2:incoming:156:outgoing:0|lo;incoming;25;outgoing;25 tunl0;incoming;0;outgoing;0 gre0;incoming;0;outgoing;0 sit0;incoming;0;outgoing;0 eth0;incoming;170KB;outgoing;1606KB eth1;incoming;1576KB;outgoing;170KB eth2;incoming;156;outgoing;0'; 
my @s; 
push @s, map { 
    my @f = split /:/; 
    [ $f[0], [$f[1], 'GAUGE', $f[2] ], [$f[3], 'GAUGE', $f[4]] ] 
    } (split(/ |\|/, $res))[3..5]; 
print Dumper @s; 

這分裂的條紋g在空間或管道|,取第3到第5個元素(這是前三個接口),然後與它們進行循環。它在冒號:上分裂,建立你的數據結構併爲每個接口返回它。返回的數據結構被推入@s

輸出:

$VAR1 = [ 
      'eth0', 
      [ 
      'incoming', 
      'GAUGE', 
      '170KB' 
      ], 
      [ 
      'outgoing', 
      'GAUGE', 
      '1606KB' 
      ] 
     ]; 
$VAR2 = [ 
      'eth1', 
      [ 
      'incoming', 
      'GAUGE', 
      '1576KB' 
      ], 
      [ 
      'outgoing', 
      'GAUGE', 
      '170KB' 
      ] 
     ]; 
$VAR3 = [ 
      'eth2', 
      [ 
      'incoming', 
      'GAUGE', 
      '156' 
      ], 
      [ 
      'outgoing', 
      'GAUGE', 
      '0' 
      ] 
     ]; 
+0

謝謝。模式是問題。你是生命的救星:) – primero

+0

不客氣。 :) – simbabque