Comment puis-je voir la quantité de bande passante utilisée par chaque hôte virtuel Apache?


24

J'ai installé Apache pour servir plusieurs hôtes virtuels, et j'aimerais voir la quantité de bande passante utilisée par chaque site. Je peux voir combien le serveur entier utilise, mais je voudrais des rapports plus détaillés.

La plupart des choses que j'ai découvertes concernent la limitation de la bande passante aux hôtes virtuels, mais je ne veux pas le faire; Je veux juste voir quels sites utilisent combien de bande passante.

Ce n'est pas à des fins de facturation, juste pour information.

Existe-t-il un module Apache que je devrais utiliser? Ou existe-t-il une autre façon de procéder?

Réponses:


23

Les informations que vous recherchez figurent toutes dans les journaux, vous devez donc consulter un analyseur de journaux tel que AWStats . L'autre option consiste à utiliser Google Analytics.

Pour analyser les journaux, voici un exemple approximatif que vous pouvez utiliser pour vous dire combien de Mo de trafic un fichier journal rapporte à partir de la ligne de commande:

cat /var/log/apache/access.log | awk '{SUM+=$10}END{print SUM/1024/1024}'

5
utilisation inutile de cat: awk '...' /var/log/apache/access.log fonctionne aussi
marco

La ou les méthodes suggérées calculeront-elles le trafic envoyé de certaines pages Web vers Internet (trafic sortant)?
Khaled

2
Oui. Mais faites attention à ne pas résumer les codes de réponse par accident. J'ai réalisé que mes comptes étaient bien trop bas car pour moi, 10 $ est le code de réponse http. Pour mon journal personnalisé apache, j'avais besoin d'utiliser {SUM + = $ 11} à la place.
Phil


3

Je vous suggère d'utiliser le merveilleux mécanisme de journalisation d'Apache et ses indicateurs % I et % O moins connus :

Définissez le format:

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

Utilisez-le dans votre httpd.conf principal :

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

Les valeurs ne représentent probablement pas toutes les informations d'en-têtes, mais sont assez précises pour avoir une idée précise du trafic VirtualHost.

Analysez les journaux avec un script perl pour les regrouper par hôte virtuel toutes les n minutes (5 par exemple) et envoyez-les à cacti.

Ces drapeaux sont fournis par mod_logio qui est probablement intégré à votre Apache (comme pour Apache de mon Debian).


2
Hum, également cité dans la documentation Apache 2.0: notez que dans httpd 2.0, contrairement à 1.3, les chaînes de format% b et% B ne représentent pas le nombre d'octets envoyés au client, mais simplement la taille en octets de la réponse HTTP ( qui sera différent, par exemple, si la connexion est abandonnée ou si SSL est utilisé). Le format% O fourni par mod_logio enregistrera le nombre réel d'octets envoyés sur le réseau.
oct

2

Si vous décidez d'utiliser awstats avec Apache, il vous montrera immédiatement la bande passante agrégée pour l'ensemble de votre serveur.

Pour voir la bande passante par hôte virtuel, je recommande d'installer vlogger .

Vlogger rassemblera en fait les informations du journal d'accès Apache pour chacun de vos hôtes virtuels que vous avez configurés pour le faire dans des répertoires / fichiers séparés.

Par exemple, si votre fichier journal Apache se trouve dans / var / log / apache2, l'installation typique de vlogger créera quelque chose comme ceci pour vos hôtes virtuels (par exemple vhost1.com vhost2.com):

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

Vlogger vous donne la possibilité de faire pivoter ces journaux pour vous, fournit un moyen de modifier le modèle de dénomination du fichier journal d'accès (par exemple, ajoutez une date) et prétend qu'il gère un grand nombre de fichiers journaux mieux qu'Apache.

Un inconvénient est que vous n'aurez plus de vue de serveur agrégée (vous devrez agréger les journaux séparément ou peut-être utiliser un paramètre Apache supplémentaire ou peut-être une autre méthode?).

Je vous déconseille d'utiliser google analytics (ou tout suivi basé sur javascript) pour la surveillance de la bande passante du serveur car vous comptez sur le client pour signaler via le javascript. GA ne vous signale pas les personnes dont le javascript est désactivé ainsi que les robots / araignées / robots.


1

Voici quelques regex pour analyser le format de journal proposé par 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 +)

Exemple de journal:

[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 [12 / Jan / 2011: 14: 25: 04 +0000] 157.157.12.206 files.hjaltijakobsson.com /favicon.ico 592 512

Allumettes:

Sous-modèle 1 (jour du mois): 12
Sous-modèle 2 (mois
abrégé ): Jan Sous-modèle 3 (année): 2011
Sous-modèle 4 (hôte visiteur): 157.157.12.206
Sous-modèle 5 (hôte virtuel): files.hjaltijakobsson.com
Sous-modèle 6 ( octets entrants): 581
Sous-modèle 7 (octets sortants): 669

À votre santé.


1

Modifiez légèrement la réponse acceptée en supposant qu'il y a en fait plusieurs vhosts sur le serveur (et donc plusieurs sites.com.access_log). Cela triera et listera chaque vhost

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

et pour un répertoire de journaux gzippés

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 

0

Hmm, vous pourriez avoir du mal avec IPTables et la correspondance de chaînes pour enregistrer les paquets pour des rapports ultérieurs. Ne fonctionnera cependant que pour les connexions non SSL.

Ou quelque chose de sensible au protocole et à la session comme Snort pourrait être utilisé comme un sabot ...


0

Correct. Filtrer le journal est une bonne idée. Je souhaite également obtenir la bande passante de mon serveur Apache lors du téléchargement de fichiers.

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

Calcule la sortie %bet %d, ce qui vous donnera la bande passante du courant.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.