OpenVZ Forum


Home » International » Russian » Снимать показания трафика с VE
Снимать показания трафика с VE [message #34170] Wed, 10 December 2008 16:41 Go to next message
pentarh is currently offline  pentarh
Messages: 13
Registered: October 2008
Location: Russia
Junior Member
Вопрос знатокам. Вот есть у меня хост-машина с некоторым количеством VE.

Как можно снимать показания трафика (лучше всего счетчики а-ля SNMP::IF-MIB) с VE машин, не устанавливая на оные сторонний софт?
Re: Снимать показания трафика с VE [message #34587 is a reply to message #34170] Mon, 19 January 2009 14:31 Go to previous messageGo to next message
sa10 is currently offline  sa10
Messages: 103
Registered: May 2007
Location: Minsk
Senior Member
Статистика трафика и его учет рассматриваются у нас как две разные задачи и потому решаются разными средствами.
Подробно расписывать не буду как у нас это работает, а в общих чертах примерно так:
Использую на своем узле openvz интерфейсы veth.
Для наблюдения за статистикой Cacti собирает данные со счетчиков демона SNMP работающего на HN. Интерфейсы VE там выглядят как veth1001.0 veth1001.1.

Кроме того демоны SNMP работают еще на паре VE, где собирают специфические данные от Squid и Zimbra.

На одной VE работает фаервол между инетом, внутренними сетями и DMZ (несколько VE). Для учета трафика на фаерволе работает демон pmacctd. Он агрегатирует трафик по заданным параметрам и выгружает на mysql сервисного хоста где ежедневно скрипты формируют краткие отчеты по сетям, хостам, датам и т.п., и шлют их заинтересованным лицам.
Никаких вебморд для учета трафика не использую. ИМХО это лишнее.


--------------------

[Updated on: Mon, 19 January 2009 14:36]

Report message to a moderator

Re: Снимать показания трафика с VE [message #34588 is a reply to message #34170] Mon, 19 January 2009 14:43 Go to previous messageGo to next message
pentarh is currently offline  pentarh
Messages: 13
Registered: October 2008
Location: Russia
Junior Member
Я нашел способ проще.

На хост машине имеется перл скрипт:

#!/usr/bin/perl

use strict;

unless ($ARGV[0]) {
    die "Syntax:\n\t $0 VEID[:INTERFACE] [VEID[:INTERFACE]] ...\n";
}

my $velist='';
my %ve=();
my $i;

for ($i=0;$i<=$#ARGV;$i++) {
    unless ($ARGV[$i]=~/(^\d+)(\:(\d+))?$/) {
        die "Did not understand parameter: ".$ARGV[$i]."\n";
    }
    $velist.=" -v ".$1;
    $ve{$1}=defined $3?$3:'*';
}

my $pipe;
open $pipe,'/usr/sbin/vznetstat '.$velist.' |' or die 'Cant open pipe';

while(<$pipe>) {
    if (/^(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/) {
        if ($ve{$1} ne '*') {
            next if ($ve{$1} != int($2));
        }
        # ID:INTERFACE:IN[bytes]:OUT[bytes]
        print "$1:$2:$3:$5\n";
    }
}

close $pipe;


С удаленной тачки, настроенной на авторизацию по пабликкей с хостмашиной, идет коннект ssh user@vehost /usr/bin/sudo /usr/bin/traf [VE_ID]:[IF_ID]

Например

ssh user@vehost /usr/bin/sudo /usr/bin/traf 101:1 102:1 103:1

Выдаст статсу по трафику ВЕшек 101,102,103:
101:1:6447550660:112284297
102:1:6837291929:127291029
103:1:628398400:17837611
Re: Снимать показания трафика с VE [message #34590 is a reply to message #34588] Mon, 19 January 2009 14:48 Go to previous messageGo to next message
sa10 is currently offline  sa10
Messages: 103
Registered: May 2007
Location: Minsk
Senior Member
в моем openvz нет утилиты vznetstat... Confused
(vzctl-3.0.22-r2)


--------------------

[Updated on: Mon, 19 January 2009 14:49]

Report message to a moderator

Re: Снимать показания трафика с VE [message #34591 is a reply to message #34170] Mon, 19 January 2009 14:49 Go to previous messageGo to next message
pentarh is currently offline  pentarh
Messages: 13
Registered: October 2008
Location: Russia
Junior Member
А, точно. Это виртуозовская утилитка.
Re: Снимать показания трафика с VE [message #34592 is a reply to message #34591] Mon, 19 January 2009 14:51 Go to previous messageGo to next message
sa10 is currently offline  sa10
Messages: 103
Registered: May 2007
Location: Minsk
Senior Member
Простенький учет можно еще от пакета vnstat получать
типа
vnstat -m -i eth2

 eth2  /  monthly

   month         rx      |      tx      |   total
-------------------------+--------------+--------------------------------------
  Feb '08     102.65 GB  |    19.59 GB  |   122.24 GB   %%%%:
  Mar '08     370.22 GB  |   111.03 GB  |   481.24 GB   %%%%%%%%%%%%%%%%%:::::
  Apr '08      59.29 GB  |     8.97 GB  |    68.26 GB   %%%
  May '08     155.89 GB  |    15.33 GB  |   171.23 GB   %%%%%%:
  Jun '08     177.14 GB  |    28.37 GB  |   205.51 GB   %%%%%%%%:
  Jul '08     186.15 GB  |    23.99 GB  |   210.14 GB   %%%%%%%%:
  Aug '08     200.98 GB  |    22.98 GB  |   223.97 GB   %%%%%%%%%:
  Sep '08     241.93 GB  |    28.80 GB  |   270.73 GB   %%%%%%%%%%%:
  Oct '08     282.79 GB  |    32.38 GB  |   315.17 GB   %%%%%%%%%%%%%:
  Nov '08     290.87 GB  |    32.48 GB  |   323.35 GB   %%%%%%%%%%%%%:
  Dec '08     324.48 GB  |    41.52 GB  |   366.01 GB   %%%%%%%%%%%%%%::
  Jan '09     211.30 GB  |    42.19 GB  |   253.48 GB   %%%%%%%%%::
-------------------------+--------------+--------------------------------------
 estimated    350.90 GB  |    70.06 GB  |   420.96 GB


--------------------

[Updated on: Mon, 19 January 2009 14:53]

Report message to a moderator

Re: Снимать показания трафика с VE [message #34748 is a reply to message #34170] Fri, 30 January 2009 13:57 Go to previous message
pentarh is currently offline  pentarh
Messages: 13
Registered: October 2008
Location: Russia
Junior Member
Вот упрощенный вариант утилиты vznetstat на перле написал

Запускается с хост-машины, дает показания трафика по интерфейсам заданной VE. Обычно интерфейс под номером 0 - loopback.

#!/usr/bin/perl -w

my $numArgs = $#ARGV + 1;

if ($numArgs <= 0) {
    print "Usage: $0 VEID [VEID] [...]\n";
    exit;
}

my $ve;
my $counter=0;

print "CTID\tifNum\tInput(bytes)\tInput(packets)\tOutput(bytes)\tOutput(packets)\n";

foreach $ve (@ARGV) {
    if ($ve =~ /^\d+$/) {

        my $s = `/usr/sbin/vzctl status $ve`;
        if ($s =~ /^VEID \d+ exist/) {
            my $fp;
            $counter=0;
            open $fp, "/usr/sbin/vzctl exec $ve cat /proc/net/dev |";
            while (<$fp>) {
                if (/^\s*([a-z0-9_-]+):\s*(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/) {
                    print "$ve\t$counter\t$2\t$3\t$10\t$11\n";
                    $counter++;
                }
            }
        }
    }
}


Пример использования
# ./vznetstat 100 200
CTID    ifNum   Input(bytes)    Input(packets)  Output(bytes)   Output(packets)
100     0       216216705       1693881 216216705       1693881
100     1       2948225436      33918128        57983428690     48185011
200     0       397660994315    338046152       397660994315    338046152
200     1       537780976361    3870889534      7946463690716   5913777508

[Updated on: Fri, 30 January 2009 13:59]

Report message to a moderator

Previous Topic: RE: Kernel RHEL5 028stab060.2 released
Next Topic: [solved]проблемы с сетью в VE
Goto Forum:
  


Current Time: Tue Mar 19 03:02:29 GMT 2024

Total time taken to generate the page: 0.02319 seconds