Jak mogę oglądać bieżące połączenia na moim serwerze Apache?

37

Hostuję sporo wirtualnych hostów używających Apache w podstawowej konfiguracji LAMP przy pomocy Webmin / Virtualmin. Szukam najlepszego narzędzia, w którym mogę monitorować bieżące połączenia. Wygląda na to, że część wirtualnego hostingu sprawia mi problemy. Oto, co próbowałem:

  • netstat- Widzę połączenia, ale pokazują mi, jakby wszyscy korzystali z mojej podstawowej domeny, np mydomain.com:www.
  • iftop- Bardzo mi się podoba, ale podobny minus jak netstat: nie pokazuje wirtualnego hosta.
  • apachetop- wydaje się nie wyświetlać informacji dla wszystkich moich wirtualnych hostów. Loguję się w celu oddzielenia niestandardowych plików dziennika, co, jak podejrzewam, jest przyczyną tego, że nie działa.
  • ntop, darkstat, MRTG, bwm-ng, IPTraf- nie działa albo.

Zasadniczo szukam czegoś podobnego do bieżącego wyniku netstat, ale aby uwzględnić hosta wirtualnego, dla którego jest to żądanie, np avirtualsite.com:www. :

Piotr Kula
źródło
Używam Apache2 - domyślnej instalacji lampy użytku z VirtualMin / Webminie - Właśnie znalazłem apachetop- ale to tylko monitoruje plików i zapewnić .. damnit- nie wszystkie serwery ...
Piotr Kula

Odpowiedzi:

35

Odpowiedź Andrei Corbellini wyjaśnia, dlaczego nie działa z używanymi narzędziami i jak działa Virtual Hosting. Oto najprostszy sposób, w jaki mogę to zrobić w Apache ...

mod_status pomoże ci.

Oświadczenie: Nie mogę powiedzieć, jak to się robi w Webmin - używam czystych plików konfiguracyjnych do konfigurowania serwerów. Oto tylko podstawowy przegląd tych kroków.

To topnarzędzie podobne do tego, ale reprezentowane jako strona internetowa. Wyświetla bieżący stan bezpośrednio zapytany z Apache, więc nie zależy to od parsowania plików dziennika, jak to apachetoprobi.

  1. Włącz mod_status:

    sudo a2enmod status
    
  2. Udziel sobie dostępu.

    • Otwórz /etc/apache2/mods-enabled/status.confi edytuj:
    • Ustaw ExtendedStatusna On(opcjonalnie, ale więcej grozy i trochę wolniej)
    • W ramach <Location /server-status>, dołączyć swój adres IP zgodne z Allowdyrektywą. Przykład:

      Allow from 127.0.0.1 ::1 66.77.88.99
      
  3. Uruchom ponownie Apache:

    sudo service apache2 restart
    
  4. Korzystaj z narzędzia w przeglądarce, na przykład: http://1.2.3.4/server-status

    Będzie to wyglądać jak ten przykładowy zrzut ekranu .

  5. Naciskaj, F5aby otrzymywać aktualizacje. Lub zdobądź niesamowitą wtyczkę do przeglądarki i zobacz, jak się aktualizuje!


Webmin

uzupełnienie OP dla przyszłych gości

W Webmin podstawowe kroki dotyczące modułu Status można znaleźć tutaj:

  • Serwery -> Apache Webserver -> Konfiguruj moduły Apache
  • Wybierz moduł stanu i kliknij opcję Włącz wybrane moduły

wprowadź opis zdjęcia tutaj

gertvdijk
źródło
ciekawe - ale jeśli mam 100 wirtualnych stron - czy pokażą mi statystyki WSZYSTKICH stron? ponieważ dziennik koonekcji w /var/log/apache2/access.log jest pusty, ponieważ nie korzystamy z domyślnej strony internetowej, każda strona internetowa ma swój własny plik /log/access.log
Piotr Kula
2
Bardzo cię teraz lubię. Daj buziaka: * +1
Piotr Kula
Geniusz - tego właśnie potrzebowałem. pokazuje mi teraz vhost! Dzięki milionowi ludzi! Nie wiem jak odpłacić za twoją wiedzę!
Piotr Kula,
Poważnie! Uwielbiam to narzędzie statusu tak bardzo! Dzięki temu wykryłem tak wiele skryptów. Pomogło mi to załatać, zaktualizować i naprawić witryny. Twoja pomoc jest bardzo doceniana. Chciałbym móc przekazać Ci wszystkich moich przedstawicieli!
Piotr Kula,
@ppumkin Proszę nie przesadzać. Jest to bardzo prosty i powszechny moduł Apache do tych zadań. Każda szanująca się książka na temat Apache wspomina o tym. Cieszę się jednak, że byłem w tym pomocny.
gertvdijk
15

Wszystkie narzędzia, których próbujesz, nigdy nie dadzą ci właściwej odpowiedzi. Powodem jest to, że żądane informacje są tracone podczas nawiązywania połączenia.

Weźmy przykład: załóżmy, że twój serwer WWW ma jeden adres IP ( 1.2.3.4 ) i dwie nazwy hostów ( a.moja_domena.com i b.moja_domena.com ), które odpowiadają temu adresowi IP.

Co dzieje się, gdy korzystasz z ulubionej przeglądarki internetowej podczas odwiedzania witryny a.mydomain.com ?

  1. Przeglądarka pyta serwer DNS, jaki adres IP odpowiada domenie a.mydomain.com .
  2. Serwer DNS informuje przeglądarkę, że adres to 1.2.3.4 .
  3. Przeglądarka łączy się z 1.2.3.4 .

So netstat& co. wiedz tylko, że istnieje połączenie przychodzące do 1.2.3.4 . Powodem, dla którego widzisz nazwę hosta zamiast adresu IP, jest to, że adres IP ma rekord rDNS, więc netstatwoli pokazywać to zamiast adresu IP, ponieważ jest ładniejszy. Spróbuj netstat -n(lub usuń rekord rDNS), a zobaczysz adres IP.

Ale to nie wszystko: kiedy powiedziałem, że informacje o nazwie hosta użyte do nawiązania połączenia zostały utracone, nie miałem w pełni racji. Z punktu widzenia stosu TCP / IP to zdanie jest prawdziwe. Ale jeśli widzimy to z punktu widzenia protokołu HTTP, wszystko jest inne. W każdym żądaniu HTTP znajduje się Host:nagłówek zawierający nazwę hosta użytą przez przeglądarkę do złożenia żądania.

Krótko mówiąc, powinieneś spojrzeć na pliki dziennika swojego serwera WWW. Serwer WWW to usługa, która obsługuje żądania HTTP, a zatem jedyna usługa, która wie o „oryginalnej” nazwie hosta.

Andrea Corbellini
źródło
1
+1 Ważne historie sieciowe są niedoceniane. Powiązane w mojej odpowiedzi, to też zasługuje na poparcie!
gertvdijk
13

Innym sposobem jest pisanie

tail -f /var/log/apache2/access.log

w twoim terminalu

niksmac
źródło
2
Ładny i prosty; całkiem prosto, dzięki!
Julian F. Weinert
Zauważam, że w moich instalacjach cPanel (na maszynach CentOS, ale myślę, że cPanel na Ubuntu jest prawdopodobnie taki sam), access.lognie zawiera wszystkich żądań. Zamiast tego /usr/local/apache/domlogs/zaglądam do żądań wirtualnych hostów (podzielonych między SSL, non-SSL, a nawet FTP). Ścieżka może być inna w Ubuntu cPanel.
Buttle Butkus
2
Znalazłem to od Google. Ta technika działa w CentOS 7, /var/log/httpd/access_log
tyle
7

Za pomocą tego basha możesz sprawdzić wszystkie IP podłączone do portu 80

netstat -tn 2>/dev/null | grep :80 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head

Uwaga: jeśli chcesz zobaczyć inny port, zmień 80

WYDAJNOŚĆ:

 19 x.174.143.1
 13 x.175.135.1
  9 x.68.135.1
  8 x.144.87.1
  7 x.68.150.1
  6 x.92.4.1
  6 x.188.23.1
  5 x.190.164.1
  4 x.189.156.1
DarckBlezzer
źródło
2

Możesz to sprawdzić za pomocą:

netstat -na | grep 'ESTA'
użytkownik1717828
źródło
1

Jeśli chcesz pid, użytkownika i polecenia:

lsof  -i  tcp:443,80 | egrep 'PID|->' | sort -k9
Vextor
źródło
0

Możesz także używać GoAccess interaktywnie, aby zobaczyć swoich obecnych gości. W tym celu analizuje dziennik dostępu Apache i wyświetla wiele statystyk dotyczących Twojej witryny.

umar14
źródło