Jak mogę sprawdzić, ile przepustowości wykorzystuje każdy wirtualny host Apache?

24

Mam skonfigurowanego Apache do obsługi kilku wirtualnych hostów i chciałbym zobaczyć, ile przepustowości wykorzystuje każda strona. Widzę, ile zużywa cały serwer, ale chciałbym uzyskać bardziej szczegółowe raporty.

Większość rzeczy, które tam odkryłem, dotyczą ograniczania przepustowości do hostów wirtualnych, ale nie chcę tego robić; Chcę tylko zobaczyć, które strony używają przepustowości.

To nie jest do celów rozliczeniowych, tylko w celach informacyjnych.

Czy powinienem użyć modułu apache? A może jest jakiś inny sposób?

pkaeding
źródło

Odpowiedzi:

23

Informacje, których szukasz, znajdują się w dziennikach, więc powinieneś spojrzeć na analizator dzienników, taki jak AWStats . Inną opcją jest użycie Google Analytics.

Poniżej znajduje się przybliżony przykład analizy dzienników, który pozwala określić, ile MB ruchu generuje plik dziennika z wiersza polecenia:

cat /var/log/apache/access.log | awk '{SUM+=$10}END{print SUM/1024/1024}'
Kserkses
źródło
5
bezużyteczne użycie cat: awk '...' /var/log/apache/access.log też działa
marco
Czy sugerowane sposoby obliczą ruch wysłany z niektórych stron internetowych do Internetu (ruch wychodzący)?
Khaled
2
Tak. Uważaj jednak, aby nie sumować kodów odpowiedzi przez przypadek. Zdałem sobie sprawę, że moje liczby były zdecydowanie za niskie, ponieważ dla mnie 10 $ to kod odpowiedzi http. W moim niestandardowym dzienniku apache musiałem zamiast tego użyć {SUM + = 11 $}.
Phil
3

Awstats to jeden ze sposobów, ale prawdopodobnie nie najlepszy

Antoine Benkemoun
źródło
3

Sugeruję użycie wspaniałego mechanizmu rejestrowania apache i jego mniej znanych flag % I i % O :

Zdefiniuj format:

LogFormat "% t% a% v% U% q% I% O" IOFormat

Użyj go w głównym httpd.conf :

CustomLog /var/log/apache2/all-bw.log IOFormat

Wartości prawdopodobnie nie uwzględniają wszystkich informacji w nagłówkach, ale są dość dokładne, aby mieć dokładne pojęcie o ruchu VirtualHost.

Skanuj dzienniki za pomocą skryptu Perla, aby agregować według hosta wirtualnego co n minut (na przykład 5) i wysyłaj to do kaktusów.

Te flagi są dostarczane przez mod_logio, który prawdopodobnie jest wbudowany w twój Apache (tak jak w moim Apache Debiana).

Paź
źródło
2
Hum, jak również cytowano w dokumentacji Apache 2.0: Zauważ, że w httpd 2.0, w przeciwieństwie do 1.3, łańcuchy formatu% b i% B nie reprezentują liczby bajtów wysłanych do klienta, ale po prostu rozmiar w bajtach odpowiedzi HTTP ( które będą się różnić na przykład w przypadku przerwania połączenia lub użycia protokołu SSL). Format% O podany przez mod_logio rejestruje rzeczywistą liczbę bajtów wysłanych przez sieć.
Paź
2

Jeśli zdecydujesz się korzystać z awstats z Apache, po wyjęciu z pudełka pokaże ci łączną przepustowość dla całego serwera.

Aby zobaczyć przepustowość dla poszczególnych hostów wirtualnych, zalecam zainstalowanie vloggera .

Vlogger będzie gromadził informacje o dzienniku dostępu Apache dla każdego z twoich wirtualnych hostów, które skonfigurowałeś do tego w osobnych katalogach / plikach.

Na przykład, jeśli plik dziennika Apache znajduje się w / var / log / apache2, typowa instalacja vloggera utworzy coś takiego dla twoich wirtualnych hostów (np. Vhost1.com vhost2.com):

/var/log/apache2/vhost1.com/access.log
/var/log/apache2/vhost2.com/access.log

Vlogger daje Ci możliwość obrócenia tych dzienników, umożliwia zmianę szablonu nazewnictwa pliku dziennika dostępu (np. Dodanie daty) i twierdzi, że obsługuje większą liczbę plików dziennika niż Apache.

Wadą tego jest to, że nie będziesz już mieć zagregowanego widoku serwera (będziesz musiał agregować logi osobno, a może użyjesz dodatkowego ustawienia apache lub innej metody?).

Odradzam korzystanie z Google Analytics (lub jakiegokolwiek śledzenia opartego na javascript) do monitorowania przepustowości serwera, ponieważ polegasz na kliencie, który będzie raportował za pomocą javascript. GA nie zgłasza ci osób, które mają wyłączony javascript, a także robotów / pająków / botów.

użytkownik12345
źródło
1

Oto kilka wyrażeń regularnych do analizy formatu dziennika zaproponowanego przez Xerxes.

\ [([0-9] +) / (\ w +) / ([0-9] {4}) [^ \]] + \] \ s (\ d {1,3}. \ D {1, 3}. \ D {1,3}. \ D {1,3}) \ s ([^ /] +) [^ \ s] + \ s (\ d +) \ s (\ d +)

Przykładowy dziennik:

[12 stycznia 2011: 14: 25: 04 +0000] 157.157.12.206 files.hjaltijakobsson.com / 581 669 [12 / sty / 2011: 14: 25: 04 +0000] 157.157.12.206 files.hjaltijakobsson.com / 624 747 [12 / sty / 2011: 14: 25: 04 +0000] 157.157.12.206 files.hjaltijakobsson.com /icons/blank.gif 687 186 [12 / sty / 2011: 14: 25: 04 +0000] 157,157. 12.206 files.hjaltijakobsson.com /icons/compressed.gif 693 188 [12 / Jan / 2011: 14: 25: 04 +0000] 157.157.12.206 files.hjaltijakobsson.com /favicon.ico 592 512

Mecze:

Subpattern 1 (dzień miesiąca): 12
Subpattern 2 (skrót miesiąca): Jan
Subpattern 3 (rok): 2011
Subpattern 4 (gość): 157.157.12.206
Subpattern 5 (wirtualny host): files.hjaltijakobsson.com
Subpattern 6 ( bajty przychodzące): 581
Subpattern 7 (bajty wychodzące): 669

Twoje zdrowie.

hjaltij
źródło
1

Nieznaczne poprawienie przyjętej odpowiedzi, zakładając, że na serwerze jest tak naprawdę wiele hostów vhost (a zatem wiele blogów site.com.access_log). To posortuje i wyświetli listę każdego vhosta

for f in *.access_log ; do echo `awk '{SUM+=$10}END{print SUM/1024/1024}' $f` $f ; done | sort -rn | more

i dla katalogu spakowanych logów

for f in *.access_log.*.gz ; do echo `zcat $f|awk '{SUM+=$10}END{print SUM/1024/1024}'` $f `stat -c%z $f`; done | sort -rn | more 
Michał
źródło
0

Hmm, możesz dostać zło za pomocą IPTables i dopasowywania ciągów, aby zalogować pakiety do późniejszego zgłoszenia. Działa jednak tylko w przypadku połączeń innych niż SSL.

Albo coś, co świadczy o protokole i sesji, jak Snort, może zostać zastosowane…

Rob Dudley
źródło
0

Poprawny. Filtrowanie dziennika jest dobrym pomysłem. Chcę również uzyskać przepustowość mojego serwera Apache podczas pobierania plików.

LogFormat "%h %l %t %u \"%r\" %>s %b/%D**" combined

Oblicza %bi %dwyjściowe, które dają przepustowość prądu.

David
źródło