Como posso ver quanta largura de banda cada host virtual do Apache está usando?

24

Eu tenho o Apache configurado para atender a vários hosts virtuais e gostaria de ver quanta largura de banda cada site usa. Posso ver quanto o servidor inteiro usa, mas gostaria de relatórios mais detalhados.

A maioria das coisas que eu descobri existem para limitar a largura de banda aos hosts virtuais, mas não quero fazer isso; Eu só quero ver quais sites estão usando quanta largura de banda.

Isso não é para fins de cobrança, apenas para informações.

Existe um módulo apache que devo usar? Ou existe alguma outra maneira de fazer isso?

pkaeding
fonte

Respostas:

23

As informações que você procura estão nos logs, portanto, você deve procurar um analisador de logs como o AWStats . A outra opção é usar o Google Analytics.

Para analisar os logs, veja um exemplo aproximado que você pode usar para informar quantos MB de tráfego um arquivo de log informa na linha de comando:

cat /var/log/apache/access.log | awk '{SUM+=$10}END{print SUM/1024/1024}'
Xerxes
fonte
5
uso inútil de gato: awk '...' /var/log/apache/access.log funciona muito
marco
As formas sugeridas calcularão o tráfego enviado de algumas páginas da Web para a Internet (tráfego de saída)?
Khaled
2
Sim. Mas tenha cuidado para não resumir os códigos de resposta por acidente. Percebi que minhas contagens eram muito baixas porque, para mim, US $ 10 é o código de resposta http. Para o meu log personalizado do apache, eu precisava usar {SUM + = $ 11}.
Phil
3

O Awstats é uma maneira de fazer isso, mas provavelmente não é o melhor

Antoine Benkemoun
fonte
3

Sugiro que você use o maravilhoso mecanismo de log do apache e seus sinalizadores % I e % O menos conhecidos :

Defina o formato:

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

Use-o no seu httpd.conf principal :

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

Os valores provavelmente não estão contabilizando todas as informações dos cabeçalhos, mas são bastante precisos para ter uma idéia precisa do tráfego do VirtualHost.

Examine os logs com um script perl para agregar por host virtual a cada n minutos (5 por exemplo) e envie para os cactos.

Essas sinalizações são fornecidas pelo mod_logio, que provavelmente está embutido no seu Apache (como no Apache do meu Debian).

Out
fonte
2
Hum, também conforme citado na documentação do Apache 2.0: Observe que no httpd 2.0, ao contrário do 1.3, as cadeias de formato% be% B não representam o número de bytes enviados ao cliente, mas simplesmente o tamanho em bytes da resposta HTTP ( que diferirá, por exemplo, se a conexão for interrompida ou se o SSL for usado). O formato% O fornecido pelo mod_logio registrará o número real de bytes enviados pela rede.
outubro
2

Se você decidir usar o awstats com o Apache, pronto para uso, ele mostrará uma largura de banda agregada para todo o servidor.

Para ver a largura de banda por host virtual, recomendo instalar o vlogger .

O Vlogger realmente coletará informações de log de acesso do Apache para cada um dos seus hosts virtuais configurados em diretórios / arquivos separados.

Por exemplo, se o seu arquivo de log do Apache estiver em / var / log / apache2, a instalação típica do vlogger criará algo assim para seus hosts virtuais (por exemplo, vhost1.com vhost2.com):

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

O Vlogger oferece a opção de girar esses logs para você, fornece uma maneira de alterar o modelo de nomeação do arquivo de log de acesso (por exemplo, adicionar uma data) e afirma que ele lida com um grande número de arquivos de log melhor que o Apache.

Um lado negativo disso é que você não terá mais uma exibição agregada do servidor (será necessário agregar logs separadamente ou talvez usar uma configuração adicional do apache ou talvez algum outro método?).

Eu recomendaria não usar o google analytics (ou qualquer rastreamento baseado em javascript) para o monitoramento da largura de banda do servidor, pois você conta com o cliente para relatar via javascript. O GA não informa a você pessoas que têm o javascript desativado, bem como quaisquer rastreadores / spiders / bots.

user12345
fonte
1

Aqui estão algumas expressões regulares para analisar o formato de log proposto 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 +)

Exemplo de log:

[12 / Jan / 2011: 14: 25: 04 +0000] 157.157.12.206 files.hjaltijakobsson.com / 581 669 [12 / Jan / 2011: 14: 25: 04 +0000] 157.157.12.206 files.hjaltijakobsson.com / 624 747 [12 / Jan / 2011: 14: 25: 04 +0000] 157.157.12.206 files.hjaltijakobsson.com /icons/blank.gif 687 186 [12 / Jan / 2011: 14: 25: 04 +0000] 157.157. 12.206 files.hjaltijakobsson.com /icons/compressed.gif 693 188 [Jan / 2011: 14: 25: 04 +0000] 157.157.12.206 files.hjaltijakobsson.com /favicon.ico 592 512

Fósforos:

Subparte 1 (dia do mês): 12
Subparte 2 (abr. Mês): Jan
Subparte 3 (ano): 2011
Subparte 4 (host do visitante): 157.157.12.206
Subparte 5 (host virtual): files.hjaltijakobsson.com
Subparte 6 ( bytes de entrada): 581
Subpadrão 7 (bytes de saída): 669

Felicidades.

hjaltij
fonte
1

Pequenos ajustes na resposta aceita, assumindo que existem vários vhosts no servidor (e, portanto, vários site.com.access_log 's). Isso irá classificar e listar cada vhost

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

e para um diretório de logs compactados em gzip

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 
Michael
fonte
0

Hmm, você pode ficar mal com o IPTables e a correspondência de cadeias para registrar os pacotes para relatórios posteriores. Porém, só funcionará para conexões não SSL.

Ou algo como protocolo e sessão ciente de que o Snort poderia ser usado com muito cuidado ...

Rob Dudley
fonte
0

Corrigir. Filtrar o log é uma boa ideia. Também quero obter a largura de banda do meu servidor Apache ao baixar arquivos.

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

Calcula a saída %be %d, que fornecerá a largura de banda da corrente.

David
fonte