Назад | Перейти на главную страницу

Плагин Munin bandwidth_ не показывает данные

Я пытаюсь построить график совокупной пропускной способности интерфейса с помощью 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

Кто-нибудь знает, в чем проблема или как отладить это дальше?

Использование munin 2.0.17 в Ubuntu Saucy.

Я написал плагин.

Вот сценарий, который я использую для выгрузки содержимого файла магазина. Мне также интересно узнать, определило ли самообнаружение правильный интерфейс для вас.

#!/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, который является виртуальным интерфейсом. Вместо этого может быть лучше контролировать физический интерфейс. Я посмотрел на мостовой интерфейс, который у меня был, и результаты были странными. Счетчик приема красиво увеличивался, в то время как передача никогда не менялась, даже когда я пинговал его.

У меня была такая же проблема с версией 1.37 плагина, использующей Ubuntu 14.04.

Я попытался отследить это, проверив сценарий Perl:

perl -Mstrict -cw bandwidth_

Он жаловался на какое-то странное использование разделения. Я считаю, что split нужна переменная для присвоения возвращаемого значения. Вероятно, это было изменено в 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.

Меня не волнует функция предложения, так как я уже привязал плагин к интерфейсу eth0. Скорее всего, эту часть тоже нужно поменять, если она вам понадобится. Проблема в моем случае была $uptime всегда не определено, в результате возвращается 0.

Поэтому я изменил время безотказной работы подпрограммы, чтобы присвоить возвращаемое значение переменной, а затем использовать его.

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;
}

Теперь значения, возвращаемые плагином, выглядят вполне правдоподобно.