Привет! Я использую PPPoE для подключения клиентов, и тестирую инструмент graph. Он отлично помогает понять, кто больше всего потребляет трафик. Единственная проблема в том, что как только пользователь отключается и подключается снова, графики начинают строиться заново. Как сделать так, чтобы они сохранялись? Я выбрал сохранение на диск каждые пять минут, но при перезагрузке или отключении клиента всё начинается с нуля. Спасибо, DB.
Freman
Guest
0
23.10.2006 02:49:00
Возможно, вам придется настроить rrdgraph и snmp-скрипт на удаленной машине. Частично причина сброса графика в том, что каждый раз, когда пользователь подключается, он (по сути) получает новый идентификатор — это немного сложнее, но это основные причины.
# Важные переменные ## RRDDir - Каталог для хранения всех ваших RRD файлов, он должен быть доступен для записи my $RRDDir = "/var/db/usergraph/rrd";
## GraphImageDir - Каталог для хранения файлов изображений графиков, ## он также должен быть доступен для записи my $GraphImageDir = "/var/www/localhost/htdocs/rrdimages";
# Собираем интерфейсы, inOctets и outOctets с Mikrotik my %Interfaces = %{$session->get_table(-baseoid => '1.3.6.1.2.1.2.2.1.2')}; my %InOctets = %{$session->get_table(-baseoid => '1.3.6.1.2.1.2.2.1.10')}; my %OutOctets = %{$session->get_table(-baseoid => '1.3.6.1.2.1.2.2.1.16')};
# Создаём каталог для хоста, если его нет my $Dir = "$RRDDir/$Host"; mkdir($Dir) if (!-d $Dir);
my $rrd = RRD::Simple->new();
# Проходимся по всем интерфейсам while (my($ID, $Name) = each(%Interfaces)) { # Убираем всё, кроме последнего блока из MIB $ID =~ s/.+\.(\d+)$/$1/; # Убираем лишний мусор из имен pppoe интерфейсов $Name =~ s/<pppoe-(.*?)(?:-\d+)?>/$1/i if ($Name =~ /<pppoe/i);
my $File = "$Dir/$Name.rrd";
# Создаём новый файл, если его не существует if (!-e $File) { $rrd->create( $File, bytesIn => "COUNTER", bytesOut => "COUNTER" ); }
# Обновляем данные в файле $rrd->update( $File, bytesIn => $InOctets{'1.3.6.1.2.1.2.2.1.10.'.$ID}, bytesOut => $OutOctets{'1.3.6.1.2.1.2.2.1.16.'.$ID} );
# Пытаемся создать каталог изображений mkdir("$GraphImageDir/$Host") if (!-d "$GraphImageDir/$Host");
die("Синтаксис: $0 <ipaddress>\nПример: $0 10.0.0.2\n\n") if (!@ARGV);
fetchData($ARGV[0]); Просто сохраните файл на диск, а затем добавьте его в crontab. Позже, если будет время, я сделаю скрипт для построения графиков всех/выбранных пользователей на одном графике.
dannyboy
Guest
0
23.10.2006 15:07:00
Спасибо большое, попробую.
hrober
Guest
0
06.01.2010 14:59:00
Freman, спасибо большое. Очень классный скрипт получился.
dziadzi
Guest
0
05.10.2010 21:48:00
Я использую этот скрипт, но столкнулся с проблемами. У некоторых пользователей графики какие-то "фрагментированные", полагаю, что это связано с тем, что при разрыве соединения pppoe-интерфейс перестаёт существовать, и соответствующая rrd-база данных при этом не обновляется. Кто-нибудь уже решал подобную проблему?