1

Nagiosgraph に問題があります。SNMP を介してサーバー/ワークステーションのトラフィックを監視する nagios チェックを作成しました。チェックの出力は、次のような長い文字列です。

  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

最初の 3 つのインターフェイスに興味があるため、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] ];

2 つの列 (着信、発信) を持つ 3 つのテーブル (eth0、eth1、eth2) を作成し、それ以降はそれらを適切に表現したいと考えました。問題は、通常、私のrrdファイルが自動的に作成されることですが、このチェックでは、ワークステーションの名前のrrdフォルダー内のフォルダーが作成されず、.rrdファイルも作成されず、何か関係があると感じています。マップファイルでは、おそらくマッチングが機能していないか何かです(私は今perlを使用していないため、これを言っています)。どんな提案でも大歓迎です。ありがとうございました

4

1 に答える 1

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;

これは、スペースまたはパイプ|で文字列を分割し、3 番目から 5 番目の要素 (最初の 3 つのインターフェース) を取得して、それらをループします。コロンで分割し:、データ構造を構築して、各インターフェイスに返します。返されたデータ構造は にプッシュされ@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'
          ]
        ];
于 2012-06-29T09:15:06.513 に答える