Привет! Я использую PPPoE для подключения клиентов, и тестирую инструмент graph. Он отлично помогает понять, кто больше всего потребляет трафик. Единственная проблема в том, что как только пользователь отключается и подключается снова, графики начинают строиться заново. Как сделать так, чтобы они сохранялись? Я выбрал сохранение на диск каждые пять минут, но при перезагрузке или отключении клиента всё начинается с нуля. Спасибо, DB.
Графики с использованием сервера PPPoE.
Графики с использованием сервера PPPoE., RouterOS
22.10.2006 20:41:00
|
|
|
|
23.10.2006 05:41:00
Вот перевод текста сообщения на русский язык:
Вот базовый скрипт, который должен создавать rrd и графики для каждого пользователя PPPoE. Сначала вам нужно установить Net::SNMP и RRD::Simple. В Linux это делается так просто, как # cpan Net::SNMP # cpan RRD::Simple #!/usr/bin/perl ############################################################################## # Usergraph 1.0 ############################################################## ################################################################## By Freman # ############################# ############################################################################## # # Copyright © 2006 Shannon Wynter # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, U # # The GPL Can be found here: # ############################################################################## # Важные переменные ## RRDDir - Каталог для хранения всех ваших RRD файлов, он должен быть доступен для записи my $RRDDir = "/var/db/usergraph/rrd"; ## GraphImageDir - Каталог для хранения файлов изображений графиков, ## он также должен быть доступен для записи my $GraphImageDir = "/var/www/localhost/htdocs/rrdimages"; use strict; use Net::SNMP; use RRD::Simple; sub fetchData { my $Host = $_[0]; my ($session,$error) = Net::SNMP->session( -hostname => $Host, -version => 1, -community => 'public', ); die("Ошибка: ".$error) if ($error); # Собираем интерфейсы, 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"); # Рисуем отдельные графики для пользователей $rrd->graph( $File, destination => "$GraphImageDir/$Host", basename => $Name, sources => [ qw(bytesIn bytesOut) ], source_colors => [ qw(ff0000 aa3333) ], source_labels => [ ("bytesIn", "bytesOut") ], source_drawtypes=> [ qw(AREA LINE) ], line_thickness => 2, extended_legend => 1, title => "$Name - Bytes Per Second", vertical_label => "Bytes/Sec" ); } } die("Синтаксис: $0 <ipaddress>\nПример: $0 10.0.0.2\n\n") if (!@ARGV); fetchData($ARGV[0]); Просто сохраните файл на диск, а затем добавьте его в crontab. Позже, если будет время, я сделаю скрипт для построения графиков всех/выбранных пользователей на одном графике. |
|
|
|
23.10.2006 15:07:00
Спасибо большое, попробую.
|
|
|
|
06.01.2010 14:59:00
Freman, спасибо большое. Очень классный скрипт получился.
|
|
|
|
09.10.2015 08:40:00
Решено?
|
||||
|
|
|||
Читают тему