Frage Wie kann ich sehen, wie viel Bandbreite jeder virtuelle Apache-Host verwendet?


Ich habe Apache eingerichtet, um mehrere virtuelle Hosts zu bedienen, und ich möchte sehen, wie viel Bandbreite jeder Standort verwendet. Ich kann sehen, wie viel der gesamte Server verwendet, aber ich möchte detailliertere Berichte.

Die meisten Dinge, die ich dort herausgefunden habe, sind die Begrenzung der Bandbreite auf virtuelle Hosts, aber das möchte ich nicht; Ich möchte nur sehen, welche Seiten wie viel Bandbreite verwenden.

Dies dient nicht zur Abrechnung, nur zur Information.

Gibt es ein Apache-Modul, das ich verwenden sollte? Oder gibt es einen anderen Weg, dies zu tun?


22
2018-05-29 14:28


Ursprung




Antworten:


Die Informationen, nach denen Sie suchen, befinden sich alle in den Protokollen. Sie sollten sich also einen Protokollanalysator wie z AWStats. Die andere Option ist die Verwendung von Google Analytics.

Im Folgenden finden Sie ein grobes Beispiel für die Analyse der Protokolle: Sie können angeben, wie viele MB Datenverkehr eine Protokolldatei über die Befehlszeile meldet:

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

22
2018-05-29 14:47



nutzloser Gebrauch von cat: awk '...' /var/log/apache/access.log funktioniert auch - marco
Wird der vorgeschlagene Weg den Verkehr berechnen, der von einigen Webseiten an das Internet gesendet wird (ausgehender Verkehr)? - Khaled
Ja. Aber seien Sie vorsichtig, dass Sie die Antwortcodes nicht zufällig zusammenfassen. Ich erkannte, dass meine Zählungen viel zu niedrig waren, denn für mich ist $ 10 der http-Response-Code. Für mein Apache-Custom-Log musste ich stattdessen {SUM + = $ 11} verwenden. - Phil


Awstats ist eine Möglichkeit, dies zu tun, aber wahrscheinlich nicht die beste


3
2018-05-29 14:34





Ich schlage vor, Sie verwenden den wunderbaren Apache-Logging-Mechanismus und seine weniger bekannte %ICH und %O Flaggen:

Definieren Sie das Format:

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

Benutze es in deinem Mainstream httpd.conf:

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

Die Werte berücksichtigen wahrscheinlich nicht alle Kopfzeileninformationen, sind aber ziemlich genau, um eine genaue Vorstellung von VirtualHost-Datenverkehr zu haben.

Durchsuchen Sie die Protokolle mit einem Perl-Skript, um alle n Minuten (z. B. 5) pro virtuellem Host zu aggregieren und senden Sie diese an cacti.

Diese Flags werden von mod_logio bereitgestellt, das wahrscheinlich in Ihrem Apache eingebaut ist (wie für meinen Apache von Debian).


3
2018-05-29 16:21



Hum, auch wie in der Apache 2.0-Dokumentation zitiert: Beachten Sie, dass in httpd 2.0, im Gegensatz zu 1.3, die Zeichenfolgen% b und% B nicht die Anzahl der an den Client gesendeten Bytes darstellen, sondern einfach die Größe der HTTP-Antwort ( was zum Beispiel bei einem Abbruch der Verbindung oder bei Verwendung von SSL anders sein wird). Das von mod_logio bereitgestellte% O-Format protokolliert die tatsächliche Anzahl der über das Netzwerk gesendeten Bytes. - Oct


Wenn Sie sich für die Verwendung von awstats mit Apache entscheiden, zeigt es Ihnen sofort die aggregierte Bandbreite für Ihren gesamten Server.

Um die Bandbreite pro virtuellem Host zu sehen, empfehle ich die Installation Vlogger.

Vlogger sammelt Apache-Zugriffsprotokollinformationen für jeden Ihrer virtuellen Hosts, die Sie dafür eingerichtet haben, in separaten Verzeichnissen / Dateien.

Wenn sich Ihre Apache-Protokolldatei beispielsweise in / var / log / apache2 befindet, erstellt die typische vlogger-Installation etwa Folgendes für Ihre virtuellen Hosts (z. B. vhost1.com vhost2.com):

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

Vlogger gibt Ihnen die Möglichkeit, diese Protokolle für Sie zu drehen, bietet eine Möglichkeit, die Namensvorlage der Zugriffsprotokolldatei zu ändern (z. B. ein Datum hinzufügen) und behauptet, dass es eine größere Anzahl von Protokolldateien als Apache verarbeitet.

Ein Nachteil ist, dass Sie keine aggregierte Serveransicht mehr haben werden (Sie müssen Protokolle separat aggregieren oder vielleicht eine zusätzliche Apache-Einstellung oder vielleicht eine andere Methode verwenden?).

Ich würde davor warnen, Google Analytics (oder ein javascriptbasiertes Tracking) für die Überwachung der Serverbandbreite zu verwenden, da Sie darauf vertrauen, dass der Client über das JavaScript berichtet. GA berichtet nicht an Leute, deren JavaScript deaktiviert ist, sowie an Crawler / Spider / Bots.


2
2017-08-31 22:51





Hier ist ein Regex, um das von Xerxes vorgeschlagene Protokollformat zu analysieren.

\ [([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 +)

Beispielprotokoll:

[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

Streichhölzer:

Untermuster 1 (Tag des Monats): 12
Untermuster 2 (Monat): Jan
Untermuster 3 (Jahr): 2011
Untermuster 4 (Besucher-Host): 157.157.12.206
Untermuster 5 (virtueller Host): files.hjaltijakobsson.com
Untermuster 6 (eingehende Bytes): 581
Untermuster 7 (ausgehende Bytes): 669

Prost.


1
2018-01-12 14:38





Geringfügige Änderungen an der angenommenen Antwort, vorausgesetzt es gibt tatsächlich mehrere vhosts auf dem Server (und daher mehrere site.com.access_logs). Dadurch wird jeder vhost sortiert und aufgelistet

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

und für ein Verzeichnis von gezippten Protokollen

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 

1
2018-04-28 01:13





Hmm, du könntest mit IPTables und String-Matching böse werden, um die Pakete für spätere Berichte zu protokollieren. Funktioniert jedoch nur für nicht SSL-Verbindungen.

Oder etwas Protokoll und Sitzung bewusst wie Snort könnte Schuh gehörnten in Verwendung sein ...


0
2018-05-29 14:41





Richtig. Das Filtern des Protokolls ist eine gute Idee. Ich möchte auch die Bandbreite meines Apache-Servers erhalten, wenn ich Dateien herunterlade.

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

Berechnet die %b und %d Ausgabe, die Ihnen die Bandbreite der aktuellen geben wird.


0
2018-04-15 20:24