¿Cómo puedo ver cuánto ancho de banda utiliza cada host virtual de Apache?

24

Tengo Apache configurado para servir a varios hosts virtuales, y me gustaría ver cuánto ancho de banda utiliza cada sitio. Puedo ver cuánto usa todo el servidor, pero me gustaría obtener informes más detallados.

La mayoría de las cosas que he descubierto son para limitar el ancho de banda a los hosts virtuales, pero no quiero hacer eso; Solo quiero ver qué sitios usan cuánto ancho de banda.

Esto no es para fines de facturación, solo para información.

¿Hay un módulo apache que debería usar? ¿O hay alguna otra forma de hacer esto?

pkaeding
fuente

Respuestas:

23

La información que busca está en todos los registros, por lo que debe mirar un analizador de registros como AWStats . La otra opción es usar Google Analytics.

Para analizar los registros, aquí hay un ejemplo aproximado que puede usar para indicar cuántos MB de tráfico informa un archivo de registro desde la línea de comandos:

cat /var/log/apache/access.log | awk '{SUM+=$10}END{print SUM/1024/1024}'
Jerjes
fuente
55
uso inútil de cat: awk '...' /var/log/apache/access.log también funciona
marco
¿Las formas sugeridas calcularán el tráfico enviado desde algunas páginas web a Internet (tráfico saliente)?
Khaled
2
Sí. Pero tenga cuidado de no resumir los códigos de respuesta por accidente. Me di cuenta de que mis recuentos eran demasiado bajos porque para mí $ 10 es el código de respuesta http. Para mi registro personalizado de apache, necesitaba usar {SUM + = $ 11} en su lugar.
Phil
3

Awstats es una forma de hacerlo, pero probablemente no sea la mejor.

Antoine Benkemoun
fuente
3

Le sugiero que use el maravilloso mecanismo de registro de apache y sus indicadores menos conocidos % I y % O :

Defina el formato:

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

Úselo en su httpd.conf principal :

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

Los valores probablemente no representan toda la información de los encabezados, pero son bastante precisos para tener una idea precisa del tráfico de VirtualHost.

Escanee los registros con un script perl para agregarlos por host virtual cada n minutos (5 por ejemplo) y envíelo a los cactus.

Estas marcas son proporcionadas por mod_logio, que probablemente está construido en su Apache (como para mi Apache de Debian).

oct
fuente
2
Hum, también como se cita en la documentación de Apache 2.0: tenga en cuenta que en httpd 2.0, a diferencia de 1.3, las cadenas de formato% by% B no representan el número de bytes enviados al cliente, sino simplemente el tamaño en bytes de la respuesta HTTP ( que será diferente, por ejemplo, si la conexión se cancela o si se usa SSL). El formato% O proporcionado por mod_logio registrará el número real de bytes enviados a través de la red.
Oct
2

Si decide usar awstats con Apache, listo para usar le mostrará el ancho de banda agregado para todo su servidor.

Para ver el ancho de banda por host virtual, recomiendo instalar vlogger .

Vlogger realmente recopilará información de registro de acceso de Apache para cada uno de sus hosts virtuales que configure para hacerlo en directorios / archivos separados.

Por ejemplo, si su archivo de registro de Apache está en / var / log / apache2, la instalación típica de vlogger creará algo así para sus hosts virtuales (por ejemplo, vhost1.com vhost2.com):

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

Vlogger le da la opción de rotar estos registros por usted, proporciona una forma de cambiar la plantilla de nombres del archivo de registro de acceso (por ejemplo, agregar una fecha) y afirma que maneja una gran cantidad de archivos de registro mejor que Apache.

Una desventaja de esto es que ya no tendrá una vista de servidor agregada (¿necesitará agregar registros por separado o tal vez usar una configuración de apache adicional o tal vez algún otro método?).

Advierto contra el uso de google analytics (o cualquier seguimiento basado en javascript) para la supervisión del ancho de banda del servidor, ya que depende del cliente para informar a través de javascript. GA no informa a las personas que tienen su JavaScript deshabilitado, así como a los rastreadores / arañas / bots.

user12345
fuente
1

Aquí hay algunas expresiones regulares para analizar el formato de registro propuesto por 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 +)

Registro de ejemplo:

[12 / Ene / 2011: 14: 25: 04 +0000] 157.157.12.206 archivos.hjaltijakobsson.com / 581 669 [12 / Ene / 2011: 14: 25: 04 +0000] 157.157.12.206 archivos.hjaltijakobsson.com / 624 747 [12 / Ene / 2011: 14: 25: 04 +0000] 157.157.12.206 archivos.hjaltijakobsson.com /icons/blank.gif 687186 [12 / Ene / 2011: 14: 25: 04 +0000] 157.157. 12.206 files.hjaltijakobsson.com /icons/compressed.gif 693188 [12 / ene / 2011: 14: 25: 04 +0000] 157.157.12.206 files.hjaltijakobsson.com /favicon.ico 592 512

Partidos:

Subpattern 1 (día del mes): 12
Subpattern 2 (mes
abreviado ): Jan Subpattern 3 (año): 2011
Subpattern 4 (host visitante): 157.157.12.206
Subpattern 5 (host virtual): files.hjaltijakobsson.com
Subpattern 6 ( bytes entrantes): 581
Subpatrón 7 (bytes salientes): 669

Aclamaciones.

hjaltij
fuente
1

Ligero ajuste en la respuesta aceptada, suponiendo que en realidad haya múltiples vhosts en el servidor (y, por lo tanto, múltiples site.com.access_log 's). Esto ordenará y enumerará cada vhost

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

y para un directorio de registros comprimidos

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 
Miguel
fuente
0

Hmm, podrías ponerte mal con las tablas IP y la coincidencia de cadenas para registrar los paquetes para informes posteriores. Sin embargo, solo funcionará para conexiones que no sean SSL.

O algo protocolario y sesión consciente como Snort podría ser puesto en uso ...

Rob Dudley
fuente
0

Correcto. Filtrar el registro es una buena idea. También quiero obtener el ancho de banda de mi servidor Apache cuando descargo archivos.

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

Calcula la salida %by %d, que le dará el ancho de banda de la corriente.

David
fuente