没有创建Nagiosgraph rrd文件(可能是因为地图文件)

时间:2012-06-29 07:51:12

标签: regex perl nagios rrdtool cacti

我遇到Nagiosgraph的问题。我创建了一个nagios检查,它通过SNMP监视服务器/工作站上的流量,并且检查的输出是一个长字符串,如下所示:

  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和i上的说明进行操作有我的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)。任何建议表示赞赏。谢谢

1 个答案:

答案 0 :(得分: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个元素(前三个接口),然后用它们循环。它在冒号:上拆分,构建您的数据结构并为每个接口返回它。返回的数据结构将被推送到@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'
          ]
        ];