Zliczanie transferu danych na poszczególne procesy

Serwery i sieci oparte na Slackware, wszelkiego rodzaju usługi, troubleshooting.

Moderatorzy: Moderatorzy, Administratorzy

Awatar użytkownika
Nowaker
Użytkownik
Posty: 19
Rejestracja: 2007-08-25, 11:19
Lokalizacja: Gniew / Gdańsk
Kontakt:

Zliczanie transferu danych na poszczególne procesy

Post autor: Nowaker »

Na forum dużo było tematów na temat zliczania transferu danych, jednak w żadnym nie było tego, o co mi chodzi - więc piszę ;)

Chciałbym zliczać transfer danych wykonany przez każdy proces. Stawiam serwer gry, a muszę wiedzieć, ile danych wychodzących i przychodzących generuje dziennie i miesięcznie.

Wiecie, jak to zrobić? Macie jakieś pomysły?
Pozdrawiam, [url=http://nowaker.net]Nowaker[/url]
[url=http://www.geozone.kero.pl]GeoZone.pl[/url] - [url=http://www.geozone.pl]portal geograficzny[/url]

[url=http://www.linkbazar.pl]Sprzedaj lub kup linki na swojej stronie internetowej[/url]
miszmaniac
Moderator
Posty: 1510
Rejestracja: 2006-03-19, 12:00
Lokalizacja: Gdynia
Kontakt:

Re: Zliczanie transferu danych na poszczególne procesy

Post autor: miszmaniac »

Najlepszym rozwiązaniem będzie chyba MRTG. Przejrzyj sobie dokumentacje. Jeśli chodzi o dane generowane przez proces to raczej ciężko będzie. Raczej będzie tu chodziło o ruch na porcie. To zdecydowanie jest wykonalne przy pomocy, chociażby MRTG.
http://oss.oetiker.ch/mrtg/doc/index.en.html
Pamiętaj,
Jeśli Twój problem został rozwiązany dopisz [b] [Rozw.] [/b]w tytule.
Projektowanie stron WWW: [url=http://www.miszewski.net.pl]www.miszewski.net.pl[/url]
Awatar użytkownika
Nowaker
Użytkownik
Posty: 19
Rejestracja: 2007-08-25, 11:19
Lokalizacja: Gniew / Gdańsk
Kontakt:

Re: Zliczanie transferu danych na poszczególne procesy

Post autor: Nowaker »

Ano, ruch na porcie to dokładnie to, o co mi chodzi. Serwer gry chodzi tylko na jednym, stałym porcie, więc dzięki - sprawdzę.
Pozdrawiam, [url=http://nowaker.net]Nowaker[/url]
[url=http://www.geozone.kero.pl]GeoZone.pl[/url] - [url=http://www.geozone.pl]portal geograficzny[/url]

[url=http://www.linkbazar.pl]Sprzedaj lub kup linki na swojej stronie internetowej[/url]
beukot
Użytkownik
Posty: 276
Rejestracja: 2006-06-23, 21:10
Lokalizacja: z domu/z pracy
Kontakt:

Re: Zliczanie transferu danych na poszczególne procesy

Post autor: beukot »

Zakładając, że procesy uruchamiasz z innego usera niż root, to można liczyć po uid'ach
tych userów.
Najlepsza forma, gry proces używa kilu portów lub portów losowych.
Najpiękniejszych chwil w życiu nie zaplanujesz. One przyjdą same.
Awatar użytkownika
xil
Moderator
Posty: 862
Rejestracja: 2004-06-20, 22:20
Lokalizacja: Białystok
Kontakt:

Re: Zliczanie transferu danych na poszczególne procesy

Post autor: xil »

potwierdzam, to jest sensowne podejscie.
Awatar użytkownika
Nowaker
Użytkownik
Posty: 19
Rejestracja: 2007-08-25, 11:19
Lokalizacja: Gniew / Gdańsk
Kontakt:

Re: Zliczanie transferu danych na poszczególne procesy

Post autor: Nowaker »

Dzięki za pomysły, ale nie wiem, w jaki sposób to zliczać. Moglibyście wkleić tutaj swoje konfigi i skrypty?

Szukałem na forum o MRTG, ale o zliczaniu danych na port / uid nie znalazłem.
Pozdrawiam, [url=http://nowaker.net]Nowaker[/url]
[url=http://www.geozone.kero.pl]GeoZone.pl[/url] - [url=http://www.geozone.pl]portal geograficzny[/url]

[url=http://www.linkbazar.pl]Sprzedaj lub kup linki na swojej stronie internetowej[/url]
Awatar użytkownika
matryc
Użytkownik
Posty: 74
Rejestracja: 2005-10-30, 09:51
Lokalizacja: Dąbrowa Tarnowska

Re: Zliczanie transferu danych na poszczególne procesy

Post autor: matryc »

Do generowania wykresów wystarczy LSTAT. Tam można za pomocą filtrów m ( mark ) ładnie rysować to co się chce. Pakiety oznaczysz za pomocą IPTABLES, coś takiego np:

Kod: Zaznacz cały

proto=tcp
port=12345
# Dane do serwera gier
iptables -t mangle INPUT -p $proto --dport  $port -j MARK --set-mark 98
# Dane od serwera gier
iptables -t mangle OUTPUT -p $proto --sport  $port -j MARK --set-mark 99
POZDRAWIAM
Awatar użytkownika
Nowaker
Użytkownik
Posty: 19
Rejestracja: 2007-08-25, 11:19
Lokalizacja: Gniew / Gdańsk
Kontakt:

Re: Zliczanie transferu danych na poszczególne procesy

Post autor: Nowaker »

Tyle, że nie korzystam z Apache - mam Lighttpd...
Pozdrawiam, [url=http://nowaker.net]Nowaker[/url]
[url=http://www.geozone.kero.pl]GeoZone.pl[/url] - [url=http://www.geozone.pl]portal geograficzny[/url]

[url=http://www.linkbazar.pl]Sprzedaj lub kup linki na swojej stronie internetowej[/url]
miszmaniac
Moderator
Posty: 1510
Rejestracja: 2006-03-19, 12:00
Lokalizacja: Gdynia
Kontakt:

Re: Zliczanie transferu danych na poszczególne procesy

Post autor: miszmaniac »

A, że spytam, do czego Ci apache?
Lstat to skrypt cgi od strony serwera www, a normalny daemon od strony odczytywania danych.
Pamiętaj,
Jeśli Twój problem został rozwiązany dopisz [b] [Rozw.] [/b]w tytule.
Projektowanie stron WWW: [url=http://www.miszewski.net.pl]www.miszewski.net.pl[/url]
Awatar użytkownika
Nowaker
Użytkownik
Posty: 19
Rejestracja: 2007-08-25, 11:19
Lokalizacja: Gniew / Gdańsk
Kontakt:

Re: Zliczanie transferu danych na poszczególne procesy

Post autor: Nowaker »

Gdzieś na tym forum przeczytałem, że "lstat wariuje na czymś innym niż apache".
Pozdrawiam, [url=http://nowaker.net]Nowaker[/url]
[url=http://www.geozone.kero.pl]GeoZone.pl[/url] - [url=http://www.geozone.pl]portal geograficzny[/url]

[url=http://www.linkbazar.pl]Sprzedaj lub kup linki na swojej stronie internetowej[/url]
Awatar użytkownika
matryc
Użytkownik
Posty: 74
Rejestracja: 2005-10-30, 09:51
Lokalizacja: Dąbrowa Tarnowska

Re: Zliczanie transferu danych na poszczególne procesy

Post autor: matryc »

Tak jak napisał miszmaniac :!:
Nie ma znaczenia jakiego serwera www używasz
Spróbuj zainstalować lstata i nie powinno być problemu z Lighttpd
POZDRAWIAM
beukot
Użytkownik
Posty: 276
Rejestracja: 2006-06-23, 21:10
Lokalizacja: z domu/z pracy
Kontakt:

Re: Zliczanie transferu danych na poszczególne procesy

Post autor: beukot »

Nowaker pisze:Dzięki za pomysły, ale nie wiem, w jaki sposób to zliczać. Moglibyście wkleić tutaj swoje konfigi i skrypty?

Szukałem na forum o MRTG, ale o zliczaniu danych na port / uid nie znalazłem.
Ja mam coś własnego napisane, tyle że pod FreeBSD - nie ma to jednak większego
znaczenia, bo to łatwo przenieść na linuxa.

Najpierw liczymy ruch:

Kod: Zaznacz cały

ipfw add 00030 count log ip from any to any via em1 in uid www
ipfw add 00030 count log ip from any to any via em1 out uid www
Daje nam to coś takiego:

Kod: Zaznacz cały

00030  8424622  1122245410 count log ip from any to any via em1 in uid www
00030  9550541 11774740178 count log ip from any to any via em1 out uid www
Z tego to już łatwo zrobić wykresy za pomocą mrtg/rrdtoola. Ja sobie robie tylko txt
z sumarycznym transferem:

Kod: Zaznacz cały

Sent: 7445.34MB (7.27GB)
Received: 65348.16MB (63.82GB)
Total: 72793.50MB (71.09GB)
Jakby ktoś chciał to proszę:

Kod: Zaznacz cały

#!/usr/bin/perl -w
#
# FreeBSD 5.x

$ipfw = "/sbin/ipfw";
$rule = "10000";
$state_file = "/var/db/state.intf";

$inb = 0;
$outb = 0;

if (open(H, "< $state_file")) {
    while (<H>) {
        @b = split(/ /);
        $inb += $b[0];
        $outb += $b[1];
    }
    close(H);
}

foreach $line (`$ipfw show`) {
    if ($line =~ /^$rule /) {
	chomp($line);
	@cells = split(/ +/, $line);
	if ($cells[11] eq "in") {
	    $inb += $cells[2];
	}
	elsif ($cells[11] eq "out") {
	    $outb += $cells[2];
	}
    }
}

printf("Sent: %.2fMB (%.2fGB)\nReceived: %.2fMB (%.2fGB)\nTotal: %.2fMB (%.2fGB)\n",
 $outb / 1048576, $outb / 1073741824, $inb / 1048576, $inb / 1073741824,
 ($outb + $inb) / 1048576, ($outb + $inb) / 1073741824);

if (($#ARGV >= 0) && ($ARGV[0] eq "-save")) {
    open(H, "> $state_file");
    printf(H "%s %s\n", $inb, $outb);
    close(H);
}

system "/sbin/ipfw -q zero $rule";
Najpiękniejszych chwil w życiu nie zaplanujesz. One przyjdą same.
ODPOWIEDZ