¿Cómo puedo ver las conexiones actuales en mi servidor web Apache?

37

Estoy alojando una gran cantidad de hosts virtuales que usan Apache en una configuración básica de LAMP con la ayuda de Webmin / Virtualmin. Estoy buscando una herramienta superior en la que pueda monitorear las conexiones actuales. La parte de alojamiento virtual parece estar dándome problemas aquí. Esto es lo que he intentado:

  • netstat- Puedo ver las conexiones, pero me muestran como si todas estuvieran usando mi dominio principal, por ejemplo mydomain.com:www.
  • iftop- Me gusta mucho, pero una desventaja similar a netstat: no muestra el host virtual.
  • apachetop- parece no mostrar información para todos mis hosts virtuales. Estoy iniciando sesión para separar archivos de registro personalizados, lo que sospecho es la causa de por qué no funciona.
  • ntop, darkstat, MRTG, bwm-ng, IPTraf- no funciona bien.

Así que, básicamente, estoy buscando algo similar a la salida de corriente de netstat, pero para incluir la máquina virtual la solicitud es para, por ejemplo: avirtualsite.com:www.

Piotr Kula
fuente
Estoy usando Apache2 - Instalación de LAMP predeterminada para usar con VirtualMin / Webmin - Acabo de encontrar apachetop, pero eso solo monitorea el archivo que proporciono ... maldición, no todos los servidores ...
Piotr Kula

Respuestas:

35

La respuesta de Andrea Corbellini le explica por qué no funcionará con las herramientas que está utilizando y cómo funciona Virtual Hosting. Aquí está la forma más simple que se me ocurre para hacerlo en Apache ...

mod_status te ayudará

Descargo de responsabilidad: no puedo decir cómo se hace esto en Webmin: utilizo archivos de configuración simples para configurar servidores. Aquí hay solo una descripción básica de los pasos.

Es una topherramienta similar, pero representada como una página web. Enumera el estado actual consultado directamente desde Apache, por lo que no depende del análisis de archivos de registro como lo apachetophace.

  1. Habilitar mod_status:

    sudo a2enmod status
    
  2. Concédete el acceso.

    • Abrir /etc/apache2/mods-enabled/status.confy editar:
    • Establecer ExtendedStatusen On(opcional, pero más genialidad y un poco más lento)
    • Dentro de <Location /server-status>, agregue su dirección IP a la línea con la Allowdirectiva. Ejemplo:

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

    sudo service apache2 restart
    
  4. Disfruta de la herramienta en tu navegador, por ejemplo: http://1.2.3.4/server-status

    Se verá como esta captura de pantalla de ejemplo .

  5. Sigue presionando F5para obtener actualizaciones. ¡O consigue un plugin de navegador increíble y mira cómo se actualiza!


Webmin

anexo del OP para futuros visitantes

En Webmin, los pasos básicos sobre el módulo de estado se pueden encontrar aquí:

  • Servidores -> Servidor web Apache -> Configurar módulos Apache
  • Seleccione el módulo de estado y haga clic en Habilitar módulos seleccionados

ingrese la descripción de la imagen aquí

gertvdijk
fuente
interesante, pero si tengo 100 sitios web virtuales, ¿me mostrará estadísticas de TODOS los sitios web? porque el registro de coonección en /var/log/apache2/access.log está vacío porque no usamos el sitio web predeterminado, cada sitio web tiene su propio /log/access.log distribuido en
Piotr Kula
2
Me gustas mucho ahora. Dame un beso: * +1
Piotr Kula
Genio: eso es lo que necesitaba. me está mostrando vhost ahora! Gracias un millón de hombres! ¡No sé cómo pagar por tu conocimiento!
Piotr Kula
¡Seriamente! ¡Amo mucho esta herramienta de estado! He detectado tantos scripts gracias a esto. Me ayudó a reparar, actualizar y reparar los sitios. Su ayuda es muy apreciada ¡Desearía poder darle a todos mi representante!
Piotr Kula
@ppumkin No exageres por favor. Es un módulo Apache muy básico y común para estas tareas. Cualquier libro respetuoso sobre Apache lo mencionará. Sin embargo, me alegro de haber sido útil en esto.
gertvdijk
15

Todas las herramientas que está probando nunca le darán la respuesta correcta. La razón es que la información que solicita se pierde cuando se realiza la conexión.

Usemos un ejemplo: supongamos que su servidor web tiene una dirección IP ( 1.2.3.4 ) y dos nombres de host ( a.mydomain.com y b.mydomain.com ) que se resuelven en esa dirección IP.

¿Qué sucede cuando usa su navegador web favorito cuando visita a.mydomain.com ?

  1. El navegador le pregunta a su servidor DNS la dirección IP a.mydomain.com correspondiente.
  2. El servidor DNS le dice al navegador que la dirección es 1.2.3.4 .
  3. El navegador web se conecta a 1.2.3.4 .

So netstat& co. Solo sé que hay una conexión entrante hecha a 1.2.3.4 . La razón por la que ve un nombre de host en lugar de una dirección IP es que la dirección IP tiene un registro rDNS, por lo que netstatprefiere mostrar eso en lugar de la IP, porque es mejor. Intente netstat -n(o elimine el registro rDNS) y verá la dirección IP.

Pero eso no es todo: cuando dije que la información sobre el nombre de host que se usó para hacer la conexión se perdió, no estaba completamente en lo cierto. Desde el punto de vista de la pila TCP / IP, esa oración es verdadera. Pero si vemos las cosas desde el punto de vista del protocolo HTTP, las cosas son diferentes. En cada solicitud HTTP hay un Host:encabezado que contiene el nombre de host que utilizó el navegador para realizar la solicitud.

Entonces, en resumen, debe mirar los archivos de registro de su servidor web. El servidor web es el servicio que maneja las solicitudes HTTP y, por lo tanto, el único servicio que conoce el nombre de host "original".

Andrea Corbellini
fuente
1
+1 Las historias de fondo importantes sobre redes están subestimadas. Vinculado en mi respuesta, ¡esto también merece votos positivos!
gertvdijk
13

Otra forma es escribir

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

en tu terminal

niksmac
fuente
2
Agradable y simple; bastante sencillo, gracias!
Julian F. Weinert
Noté que en mis instalaciones de cPanel (en máquinas CentOS, pero creo que cPanel en Ubuntu es probablemente el mismo), access.logno contiene todas las solicitudes. En cambio, miro /usr/local/apache/domlogs/para ver las solicitudes de virtualhost (dividido entre SSL, no SSL e incluso FTP). La ruta puede ser diferente en Ubuntu cPanel.
Buttle Butkus
2
Encontré esto de Google. Esta técnica funciona en CentOS 7, excepto que lo necesite/var/log/httpd/access_log
mwfearnley
7

Puede verificar todos los ips conectados en el puerto 80 con este bash

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

Nota: si desea ver otro puerto, cambie 80

SALIDA:

 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
fuente
2

Puede verificar esto con:

netstat -na | grep 'ESTA'
usuario1717828
fuente
1

Si quieres pid, usuario y comando:

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

También puede usar GoAccess de forma interactiva para ver sus visitantes actuales. Analiza su registro de acceso de Apache para este propósito y muestra un montón de estadísticas sobre su sitio.

umar14
fuente