Я пытаюсь построить график совокупной пропускной способности интерфейса с помощью 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;
}
Теперь значения, возвращаемые плагином, выглядят вполне правдоподобно.