Munin带宽插件不显示数据

我试图用Munin在一个接口上绘制累加带宽。

显然这里有一个bandwidth_插件(请参阅http://munin-monitoring.org/browser/munin-contrib/plugins/network/bandwidth_ ),我已经安装了几个星期,并且正在运行。

我期待看到一些不错的图表,但一切都设置为“0”。

当做一个munin-run ,我也得到空值:

 # munin-run bandwidth_br0 average.value 0 monthly.value 0 30dayusage.value 0 

所以我试图看看代码说:

 open( my $rx, "<", "/sys/class/net/$interface/statistics/rx_bytes" ) || die "Unable to read: $!"; $counter_input = <$rx>; chomp $counter_input; 

…并且应该输出一个不断增长的价值:

 # cat /sys/class/net/br0/statistics/rx_bytes 2095478809 

我的state文件包含以下信息:

 pst0^D^H^H12345678^D^H^H^H^C+ ^@^@^D^C^B^@^@^@^H<80>^E^@^@^@input^H<80>^F^@^@^@output ^@^@^@1398125584^D^C^B^@^@^@^H<80>^E^@^@^@input^H<80>^F^@^@^@output ^@^@^@1398037387^D^C^B^@^@^@^H<80>^E^@^@^@input^H<80>^F^@^@^@output ^@^@^@1398331077^D^C^B^@^@^@^H<80>^E^@^@^@input^H<80>^F^@^@^@output ^@^@^@1397950990^D^C^B^@^@^@^H<80>^E^@^@^@input^H<80>^F^@^@^@output 

有人会知道问题所在或者如何进一步debugging吗?

在Ubuntu Saucy上使用munin 2.0.17。

我写了插件。

这里是我用来转储商店文件内容的脚本。 我也有兴趣知道自我发现是否为您确定了正确的界面。

 #!/usr/bin/perl use Storable; use Data::Dumper; my $file="/var/lib/munin-node/plugin-state/nobody/bandwidth_eth1.state"; my $dump; my $perf_ref; my $store_ref = retrieve($file); while (my ($key, $value) = each(%$store_ref) ) { $perf_ref->{$key} = $value; } foreach $key (sort keys %$perf_ref) { if ($key =~ /last/) { print "$key\n"; } else { print scalar(localtime($key)) . "\n"; } print Dumper($perf_ref->{$key}) . "\n"; } 

看起来你正在试图测量一个虚拟界面的br0。 监视物理接口可能会更好。 我查看了一个桥接接口,结果很奇怪。 接收计数器正好递增,而传输从来没有改变,即使我ping它。

我在使用Ubuntu 14.04的插件修订版1.37中遇到同样的问题。

我试图通过perl检查脚本来追踪它:

 perl -Mstrict -cw bandwidth_ 

它抱怨一些奇怪的使用分裂。 我相信分裂需要一个variables来分配返回值。 在最近的一个版本中,perl可能会被改变。 该脚本有点过时了。

 Useless use of split in void context at bandwidth_ line 130. Useless use of split in void context at bandwidth_ line 132. Scalar value @_[0] better written as $_[0] at bandwidth_ line 212. Useless use of split in void context at bandwidth_ line 211. 

我不关心提示function,因为我已经将插件链接到eth0接口。 如果你需要的话,可能还需要改变这个部分。 在我的情况下,问题是$uptime总是未定义,导致返回0。

所以我改变了子程序的正常运行时间,把返回值赋给一个variables,然后使用它。

 sub uptime { my $puptime = "/proc/uptime"; open( TIME, "<", $puptime ) || die "Unable to read $puptime: $!"; while (<TIME>) { my @arr = split; $uptime = $arr[0]; } close(TIME); chomp $uptime; } 

现在插件返回值看起来很合理。