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

24

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

Die meisten Dinge, die ich dort herausgefunden habe, dienen dazu, die Bandbreite auf virtuelle Hosts zu beschränken, aber ich möchte das nicht tun. Ich möchte nur sehen, welche Sites wie viel Bandbreite verbrauchen.

Dies dient nicht zu Abrechnungszwecken, sondern nur zur Information.

Gibt es ein Apache-Modul, das ich verwenden sollte? Oder gibt es eine andere Möglichkeit, dies zu tun?

pkaeding
quelle

Antworten:

23

Die Informationen, nach denen Sie suchen, befinden sich alle in den Protokollen. Sie sollten sich daher einen Protokollanalysator wie AWStats ansehen . Die andere Möglichkeit ist die Verwendung von Google Analytics.

Um die Protokolle zu analysieren, ist hier ein grobes Beispiel, anhand dessen Sie feststellen können, wie viele MB Datenverkehr eine Protokolldatei über die Befehlszeile meldet:

cat /var/log/apache/access.log | awk '{SUM+=$10}END{print SUM/1024/1024}'
Xerxes
quelle
5
sinnloser Gebrauch von cat: awk '...' /var/log/apache/access.log funktioniert auch
marco
Berechnen die vorgeschlagenen Methoden den Datenverkehr, der von bestimmten Webseiten an das Internet gesendet wird (ausgehender Datenverkehr)?
Khaled
2
Ja. Achten Sie jedoch darauf, dass Sie die Antwortcodes nicht versehentlich zusammenfassen. Ich stellte fest, dass meine Zählungen viel zu niedrig waren, weil für mich 10 US-Dollar der http-Antwortcode sind. Für mein benutzerdefiniertes Apache-Protokoll musste ich stattdessen {SUM + = $ 11} verwenden.
Phil
3

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

Antoine Benkemoun
quelle
3

Ich schlage vor, dass Sie den wunderbaren Apache-Protokollierungsmechanismus und die weniger bekannten % I- und % O- Flags verwenden:

Definieren Sie das Format:

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

Verwenden Sie es in Ihrer httpd.conf :

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

Die Werte berücksichtigen wahrscheinlich nicht alle Headerinformationen, sind jedoch ziemlich genau, um eine genaue Vorstellung des VirtualHost-Datenverkehrs zu erhalten.

Scannen Sie die Protokolle mit einem Perl-Skript, um alle n Minuten (z. B. 5) ein Aggregat pro virtuellem Host zu erstellen, und senden Sie dieses an Cacti.

Diese Flags werden von mod_logio bereitgestellt, das wahrscheinlich in Ihren Apache integriert ist (wie es für den Apache meines Debian-Benutzers der Fall ist).

Okt.
quelle
2
Brummen, auch wie in der Apache 2.0-Dokumentation angegeben: Beachten Sie, dass in httpd 2.0 im Gegensatz zu 1.3 die Formatzeichenfolgen% b und% B nicht die Anzahl der an den Client gesendeten Bytes darstellen, sondern lediglich die Größe der HTTP-Antwort in Byte ( Dies unterscheidet sich beispielsweise, wenn die Verbindung abgebrochen wird oder wenn SSL verwendet wird. Das von mod_logio bereitgestellte% O-Format protokolliert die tatsächliche Anzahl der über das Netzwerk gesendeten Bytes.
Oktober
2

Wenn Sie sich für die Verwendung von awstats mit Apache entscheiden, wird standardmäßig die aggregierte Bandbreite für Ihren gesamten Server angezeigt.

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

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

Befindet sich Ihre Apache-Protokolldatei beispielsweise in / var / log / apache2, wird bei einer typischen Installation von vlogger für Ihre virtuellen Hosts Folgendes erstellt (z. B. vhost1.com vhost2.com):

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

Vlogger bietet Ihnen die Möglichkeit, diese Protokolle für Sie zu drehen, bietet eine Möglichkeit zum Ändern der Namensvorlage der Zugriffsprotokolldatei (z. B. Hinzufügen eines Datums) und behauptet, dass eine große Anzahl von Protokolldateien besser als Apache verarbeitet wird.

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

Ich würde davor warnen, Google Analytics (oder ein auf Javascript basierendes Tracking) für die Überwachung der Serverbandbreite zu verwenden, da Sie sich darauf verlassen, dass der Client über Javascript meldet. GA meldet Ihnen keine Personen, deren Javascript deaktiviert ist, sowie keine Crawler / Spinnen / Bots.

user12345
quelle
1

Hier ist ein regulärer Ausdruck, 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:

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

Prost.

hjaltij
quelle
1

Die akzeptierte Antwort leicht anpassen, vorausgesetzt, es befinden sich tatsächlich mehrere vhosts auf dem Server (und daher mehrere site.com.access_logs). Dies sortiert und listet jeden vhost auf

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 mit komprimierten 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 
michael
quelle
0

Hmm, Sie könnten mit IPTables und String Matching böse werden, um die Pakete für spätere Berichte zu protokollieren. Funktioniert allerdings nur für Nicht-SSL-Verbindungen.

Oder es könnte etwas protokoll- und sitzungsbewusstes wie Snort verwendet werden ...

Rob Dudley
quelle
0

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 %bund %dAusgabe, die Ihnen die Bandbreite des Stroms gibt.

David
quelle