Jak monitorować przepustowość sieci na użytkownika na serwerze Ubuntu?

12

Mam kilku użytkowników powłoki na serwerze z 300 GB miesięcznego transferu danych. Jak mogę monitorować wykorzystanie przepustowości na użytkownika?

Pedram
źródło
czy to w ogóle możliwe? Wydaje się, że teoretycznie byłoby to bardziej kłopotliwe niż warte swojej ceny, ponieważ technicznie musiałbyś mieć każdy proces korzystający z Internetu w celu ustalenia, kto go obsługuje, a następnie dowiedzieć się, jakie jest łączne wykorzystanie przepustowości. Czy są jakieś konkretne powody, dla których chcesz monitorować na poziomie użytkownika poza użytkownikami powłoki? Ponieważ przy 300 GB miesięcznych danych we / wy wydaje się mało prawdopodobne, abyś przekroczył tę kwotę: /
Thomas Ward
To musi być możliwe, w przeciwnym razie w jaki sposób dostawcy Internetu ograniczają przepustowość na użytkownika?
djeikyb
@EvilPhoenix Chcę monitorować użycie na użytkownika. 300 GB to niewiele dla serwera z co najmniej 20 użytkownikami, którzy używają tego serwera jako serwera proxy.
Pedram
1
Wygląda na to, że masz świetną praktyczną odpowiedź od Keesa Cooka, ale jeśli nadal szukasz metod, zastanawiam się, czy inaczej sformułowanie pytania mogłoby pomóc. Znalazłem ten przewodnik googling „jak ograniczyć przepustowość użytkownika w systemie
djeikyb

Odpowiedzi:

13

Jako root, możesz przynajmniej mierzyć ruch wychodzący dla poszczególnych użytkowników, używając modułu „właściciel” iptables. Jeśli są wszyscy użytkownicy, których chcesz monitorować /root/list-of-users.txt, możesz:

for login in $(cat /root/list-of-users.txt);
do
    iptables -N out_user_$login
    iptables -A OUTPUT -m owner --uid-owner $(id -u $login) -j out_user_$login
done

Następnie widoczne są liczby pakietów i bajtów dla ruchu wychodzącego każdego użytkownika:

iptables -L OUTPUT -n -v | grep out_

Można to dodatkowo rozszerzyć o CONNMARK, aby śledzić również stronę wejściową.

Kees Cook
źródło
Dzięki. To świetnie. Zrobiłem to. Ale dlaczego nie mogę użyć tej samej metody dla WEJŚCIA?
Pedram
1
Właściciel pakietu nie jest znany z pakietów przychodzących, ponieważ z perspektywy jądra pochodzi on spoza maszyny. CONNMARK może zostać użyty do powiązania pakietów w strumieniach TCP z ich twórcą itp., Ale nie mam na to działającego przykładu.
Kees Cook
7

Właśnie natknąłem się na NetHogs :

NetHogs to małe narzędzie „net top”. Zamiast rozkładać ruch według protokołu lub podsieci, jak większość narzędzi, grupuje przepustowość według procesów.

wprowadź opis zdjęcia tutaj

Powinno to umożliwić śledzenie przepustowości według nazwy użytkownika. Może nadal potrzebuję kilku innych narzędzi do rejestrowania informacji i dodawania ich wszystkich, ale to dobry początek bez bezpośredniego korzystania z iptables.

djeikyb
źródło
Można go również uruchomić w trybie, aby zsumować ruch: sudo nethogs -v 3 eth0(lub nacisnąć mkilkakrotnie po rozpoczęciu przełączania trybów). Połącz z, tmuxaby działać ciągle (nawet jeśli twoja sshsesja ulegnie awarii).
tanius
6

Możesz użyć kaktusów

Cacti to kompletna nakładka na RRDTool, która przechowuje wszystkie informacje niezbędne do tworzenia wykresów i wypełniania ich danymi w bazie danych MySQL. Frontend jest całkowicie oparty na PHP. Oprócz możliwości przechowywania wykresów, źródeł danych i archiwów Round Robin w bazie danych, kaktusy obsługują gromadzenie danych. Istnieje również obsługa SNMP dla osób używanych do tworzenia wykresów ruchu za pomocą MRTG.

Lub vnStat

vnStat to oparty na konsoli monitor ruchu sieciowego dla systemów Linux i BSD, który prowadzi dziennik ruchu sieciowego dla wybranych interfejsów. Wykorzystuje statystyki interfejsu sieciowego dostarczone przez jądro jako źródło informacji. Oznacza to, że vnStat nie będzie wąchał żadnego ruchu, a także zapewni lekkie wykorzystanie zasobów systemowych.

Oba są świetne.

sebikul
źródło
2
Dzięki, ale widziałem już oba z nich i wydaje się, że żaden z nich nie zapewnia monitorowania na użytkownika. Chcę monitorować użycie na użytkownika.
Pedram
5

Szukałem trochę i nie znalazłem kompleksowego pakietu GUI, który robi to, co chcesz. Mam nadzieję, że istnieje i ktoś w końcu opublikuje tutaj post.

Nie jestem facetem od sieci, ale z tego, co przeczytałem, między innymi netstati iptablespowinienem robić rozliczanie użytkowników oparte na protokole ip / host, co acctnarzędzia zrobiły z rozliczaniem procesów systemowych. Ten link cyberciti.biz może pomóc Ci w rozwoju systemu za pomocą następujących narzędzi:

http://www.cyberciti.biz/faq/linux-configuring-ip-traffic-accounting/

djeikyb
źródło
Dzięki, ale jak powiedziałeś, są one używane do rozliczania użytkowników na podstawie adresu IP. Mam użytkownika powłoki, który może korzystać z serwera w różnych lokalizacjach, szczególnie na wydziale uniwersyteckim o tym samym adresie IP (za NAT). szukając rozwiązania księgowego opartego na użytkownikach, jeśli to możliwe.
Pedram
netstat -epokazuje użytkowników powłoki, umożliwiając powiązanie adresu IP / hosta z nazwą użytkownika.
djeikyb