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. :


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


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.


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


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


1

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

lsof  -i  tcp:443,80 | egrep 'PID|->' | sort -k9

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.