Come posso guardare le connessioni correnti sul mio server web Apache?


37

Sto ospitando molti host virtuali che usano Apache in una LAMP di base impostata con l'aiuto di Webmin / Virtualmin. Sto cercando uno strumento top-like in cui posso monitorare le connessioni correnti. La parte di hosting virtuale sembra darmi problemi qui. Ecco cosa ho provato:

  • netstat- Posso vedere le connessioni, ma mi mostrano come se stessero tutti usando il mio dominio principale, ad es mydomain.com:www.
  • iftop- Mi piace molto, ma un rovescio della medaglia simile a netstat: non mostra l'host virtuale.
  • apachetop- sembra non mostrare informazioni per tutti i miei host virtuali. Sto registrando per separare i file di registro personalizzati, che sospetto sia la causa del motivo per cui non funziona.
  • ntop, darkstat, MRTG, bwm-ng, IPTraf- non funziona neanche.

Quindi, in sostanza, sto cercando qualcosa di simile alla corrente di uscita netstat, ma di includere l'host virtuale la richiesta è per, ad esempio: avirtualsite.com:www.


Sto usando Apache2 - Installazione LAMP predefinita da usare con VirtualMin / Webmin - Ho appena trovato apachetop- ma che monitora solo il file che fornisco .. dannazione- non tutti i server ...
Piotr Kula

Risposte:


35

La risposta di Andrea Corbellini ti spiega perché non funzionerà con gli strumenti che stai usando e come funziona l'hosting virtuale. Ecco il modo più semplice che mi viene in mente per farlo in Apache ...

mod_status ti aiuterà.

Dichiarazione di non responsabilità: non so dire come si fa in Webmin - utilizzo i file di configurazione nudi per configurare i server. Ecco solo una panoramica di base dei passaggi.

È uno topstrumento simile, ma rappresentato come una pagina web. Elenca lo stato corrente direttamente interrogato da Apache, quindi non dipende dall'analisi dei file di registro come apachetopfa.

  1. Abilita mod_status:

    sudo a2enmod status
    
  2. Concediti l'accesso.

    • Apri /etc/apache2/mods-enabled/status.confe modifica:
    • Impostare ExtendedStatussu On(opzionale, ma più suggestivo e un po 'più lento)
    • All'interno di <Location /server-status>, aggiungi il tuo indirizzo IP alla riga con la Allowdirettiva. Esempio:

      Allow from 127.0.0.1 ::1 66.77.88.99
      
  3. Riavvia Apache:

    sudo service apache2 restart
    
  4. Goditi lo strumento nel tuo browser, ad esempio: http://1.2.3.4/server-status

    Sembrerà questo screenshot di esempio .

  5. Continua a premere F5per ottenere aggiornamenti. O ottieni un fantastico plug-in per il browser e guardalo mentre viene aggiornato!


Webmin

addendum dell'OP per i futuri visitatori

In Webmin, i passaggi di base relativi al modulo Stato sono disponibili qui:

  • Server -> webserver Apache -> Configurazione moduli di Apache
  • Seleziona il modulo Stato e fai clic su Abilita moduli selezionati

inserisci qui la descrizione dell'immagine


interessante, ma se avessi 100 siti Web virtuali, mi mostreranno le statistiche per TUTTI i siti Web? poiché il log di connessione in /var/log/apache2/access.log è vuoto perché non utilizziamo il sito Web predefinito, ogni sito Web ha il proprio /log/access.log distribuito su tutto
Piotr Kula

2
Mi piaci molto adesso. Dammi un bacio: * +1
Piotr Kula

Genio: questo è quello di cui avevo bisogno. mi sta mostrando vhost ora! Grazie un milione di uomini! Non so come ripagare per le tue conoscenze!
Piotr Kula,

Sul serio! Adoro questo strumento di stato così tanto! Ho rilevato così tanti script grazie a questo. Mi ha aiutato a sistemare, aggiornare e riparare i siti. Il tuo aiuto è così apprezzato, vorrei poterti dare tutto il mio rappresentante!
Piotr Kula,

@ppumkin Non esagerare per favore. È un modulo Apache molto semplice e comune per queste attività. Qualsiasi libro che si rispetti su Apache lo citerà. Sono contento di essere stato utile in questo, però.
gertvdijk,

15

Tutti gli strumenti che stai provando non ti daranno mai la risposta giusta. Il motivo è che le informazioni richieste vengono perse al momento della connessione.

Facciamo un esempio: supponiamo che il tuo server web abbia un indirizzo IP ( 1.2.3.4 ) e due nomi host ( a.mydomain.com e b.mydomain.com ) che si risolvono in quell'indirizzo IP.

Cosa succede quando si utilizza il browser Web preferito quando si visita a.mydomain.com ?

  1. Il browser richiede al server DNS l'indirizzo IP a cui corrisponde a.mydomain.com .
  2. Il server DNS comunica al browser che l'indirizzo è 1.2.3.4 .
  3. Il browser Web si collega a 1.2.3.4 .

Quindi netstat& co. so solo che esiste una connessione in entrata effettuata su 1.2.3.4 . Il motivo per cui vedi un nome host invece di un indirizzo IP è che l'indirizzo IP ha un record rDNS, quindi netstatpreferisce mostrarlo al posto dell'IP, perché è più bello. Prova netstat -n(o rimuovi il record rDNS) e vedrai l'indirizzo IP.

Ma non è tutto: quando ho detto che le informazioni sul nome host utilizzate per stabilire la connessione andavano perse, non avevo pienamente ragione. Dal punto di vista dello stack TCP / IP, quella frase è vera. Ma se vediamo le cose dal punto di vista del protocollo HTTP, le cose sono diverse. In ogni richiesta HTTP è presente Host:un'intestazione che contiene il nome host utilizzato dal browser per effettuare la richiesta.

Quindi, in breve, dovresti guardare i file di registro del tuo server web. Il web server è il servizio che gestisce le richieste HTTP e quindi l'unico servizio che conosce il nome host "originale".


1
+1 Le storie di base sulle reti importanti sono sottovalutate. Legato alla mia risposta, anche questo merita voti!
gertvdijk,

13

Un altro modo è digitare

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

nel tuo terminale


2
Bello e semplice; piuttosto semplice, grazie!
Julian F. Weinert,

Ho notato che nelle mie installazioni di cPanel (su macchine CentOS, ma penso che cPanel su Ubuntu sia probabilmente lo stesso), il access.lognon contiene tutte le richieste. Invece, guardo dentro /usr/local/apache/domlogs/per vedere le richieste di virtualhost (suddivise tra SSL, non SSL e persino FTP). Il percorso potrebbe essere diverso su Ubuntu cPanel.
Buttle Butkus,

2
L'ho trovato da Google. Questa tecnica funziona in CentOS 7, tranne che per te necessario/var/log/httpd/access_log
mwfearnley,

7

Puoi controllare tutti gli ips collegati sulla porta 80 con questo bash

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

Nota: se vuoi vedere un'altra porta, cambia 80

PRODUZIONE:

 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

Se vuoi pid, utente e comando:

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

0

Puoi anche utilizzare GoAccess in modo interattivo per visualizzare i tuoi visitatori attuali. Analizza il registro di accesso di Apache per questo scopo e mostra un sacco di statistiche sul tuo sito.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.