Traffic: Unterschied zwischen den Versionen
Tim00 (Diskussion | Beiträge) |
|||
(2 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 9: | Zeile 9: | ||
Als erstes einfach mal den Log ansehen und durchscrollen. | Als erstes einfach mal den Log ansehen und durchscrollen. | ||
<syntaxhighlight lang=shell> | |||
less ~/var/web.log | |||
less ~/var/web.log-yesterday | |||
</syntaxhighlight> | |||
Da kann man oft schon alleine durch Ansehen gleichförmige Strukturen erkennen, z.B. massenhafte Login-Versuche auf einen Wordpress Blog, die sehr viel Traffic generieren. | Da kann man oft schon alleine durch Ansehen gleichförmige Strukturen erkennen, z.B. massenhafte Login-Versuche auf einen Wordpress Blog, die sehr viel Traffic generieren. | ||
Zeile 19: | Zeile 21: | ||
maßgeblich verantwortlich sind? | maßgeblich verantwortlich sind? | ||
< | <syntaxhighlight lang=shell line> | ||
cat $HOME/var/web.log |cut -d ' ' -f11 | grep -o '[0-9]*' | sort -n |uniq -c |sed -e's/^ *//' \ | cat $HOME/var/web.log |cut -d ' ' -f11 | grep -o '[0-9]*' | sort -n |uniq -c |sed -e's/^ *//' \ | ||
|while read FACTOR SUM; do | |while read FACTOR SUM; do | ||
echo "$((${FACTOR} * ${SUM})) ${FACTOR} ${SUM}"; | echo "$((${FACTOR} * ${SUM})) ${FACTOR} ${SUM}"; | ||
done |sort -n | done |sort -n | ||
</ | </syntaxhighlight> | ||
* Zeile 1: Traffic aus dem Log extrahieren, sortieren, zählen. | * Zeile 1: Traffic aus dem Log extrahieren, sortieren, zählen. | ||
* Zeile 2: über die Einträge wandern | * Zeile 2: über die Einträge wandern | ||
Zeile 32: | Zeile 34: | ||
Das Ganze als Einzeiler zum Kopieren, Einfügen und Ausführen im Terminal: | Das Ganze als Einzeiler zum Kopieren, Einfügen und Ausführen im Terminal: | ||
<syntaxhighlight lang=shell> | |||
cat $HOME/var/web.log |cut -d ' ' -f11 | grep -o '[0-9]*' | sort -n |uniq -c |sed -e's/^ *//'|while read FACTOR SUM; do echo "$((${FACTOR} * ${SUM})) ${FACTOR} ${SUM}";done |sort -n | |||
</syntaxhighlight> | |||
Dieser Skript gibt den Traffic aus, den gleichförmige Einzelzugriffe generieren, die größten Brocken stehen unten. Z.B.: | Dieser Skript gibt den Traffic aus, den gleichförmige Einzelzugriffe generieren, die größten Brocken stehen unten. Z.B.: | ||
< | <syntaxhighlight lang=output line> | ||
219558 6 36593 | 219558 6 36593 | ||
232288 14 16592 | 232288 14 16592 | ||
Zeile 48: | Zeile 52: | ||
2325929 101 23029 | 2325929 101 23029 | ||
2351668 29 81092 | 2351668 29 81092 | ||
</ | </syntaxhighlight> | ||
Ganz unten sieht man, dass 29 Zugriffe mit je 81092 Bytes zusammen 2351668 Bytes Traffic gekostet haben. In diesem Fall kann man nun ganz simpel im Log nach der dritten Zahl greppen und in less anzeigen, z.B. so: | Ganz unten sieht man, dass 29 Zugriffe mit je 81092 Bytes zusammen 2351668 Bytes Traffic gekostet haben. In diesem Fall kann man nun ganz simpel im Log nach der dritten Zahl greppen und in less anzeigen, z.B. so: | ||
<syntaxhighlight lang=shell> | |||
grep 81092 $HOME/var/web.log | less | |||
</syntaxhighlight> | |||
=== Wenn ich dieses Script öfter brauche ... === | === Wenn ich dieses Script öfter brauche ... === | ||
Zeile 62: | Zeile 68: | ||
* Script-Text hier kopieren und in den Editor einfügen | * Script-Text hier kopieren und in den Editor einfügen | ||
Hier noch mal eine etwas erweiterte Version | Hier noch mal eine etwas erweiterte Version | ||
< | <syntaxhighlight lang=shell line> | ||
#!/bin/bash | #!/bin/bash | ||
echo --------------------------------------------------------------- | echo --------------------------------------------------------------- | ||
Zeile 87: | Zeile 93: | ||
echo Logfiles des Tages nach dem Einzelvolumen durchsuchen | echo Logfiles des Tages nach dem Einzelvolumen durchsuchen | ||
echo 'Befehl: grep 81092 $HOME/var/web.log | less' | echo 'Befehl: grep 81092 $HOME/var/web.log | less' | ||
</ | </syntaxhighlight> | ||
* Script als Datei ohne Erweiterung unter einem griffigen Namen wie "volumenauswertung" speichern | * Script als Datei ohne Erweiterung unter einem griffigen Namen wie "volumenauswertung" speichern | ||
* Scriptdatei in das Home-Verzeichnis des Paket-Users auf dem Server laden. | * Scriptdatei in das Home-Verzeichnis des Paket-Users auf dem Server laden. | ||
Zeile 98: | Zeile 104: | ||
Dieser Einzeiler sollte es zeigen (Datum entsprechend ändern): | Dieser Einzeiler sollte es zeigen (Datum entsprechend ändern): | ||
< | <syntaxhighlight lang=shell> | ||
for f in ${HOME}/var/web-*-20230401*; do echo $f; gunzip -c $f | perl -nE '/\[.+\] ".+" \d+ (\d+)/; $sum += $1; END { printf("%.1f", $sum/1024/1024); print " MB\n"}'; done | for f in ${HOME}/var/web-*-20230401*; do echo $f; gunzip -c $f | perl -nE '/\[.+\] ".+" \d+ (\d+)/; $sum += $1; END { printf("%.1f", $sum/1024/1024); print " MB\n"}'; done | ||
</ | </syntaxhighlight> | ||
== Wie bekomme ich IPs mit massenhaften Web-Zugriffen erkannt und gesperrt? == | == Wie bekomme ich IPs mit massenhaften Web-Zugriffen erkannt und gesperrt? == | ||
IPs mit mehrstelligen Zugriffen werden so gefunden (Hier alle IPs mit vierstelligen Zugriffen, beachte die Ziffer 4 im Ausdruck "egrep '^[0-9]{4,} .*$'"): | IPs mit mehrstelligen Zugriffen werden so gefunden (Hier alle IPs mit vierstelligen Zugriffen, beachte die Ziffer 4 im Ausdruck "egrep '^[0-9]{4,} .*$'"): | ||
<syntaxhighlight lang=shell> | |||
cat ${HOME}/var/web.log |cut -d ' ' -f2 | sort | uniq -c |sed -e's/^ *//' | egrep '^[0-9]{4,} .*$' | |||
</syntaxhighlight> | |||
Als Paketadmin alle IPs mit 10.000 und mehr Web-Zugriffen aus dem | Als Paketadmin alle IPs mit 10.000 und mehr Web-Zugriffen aus dem | ||
heutigen Log filtern und dafür Sperreinträge erzeugen, die man in die | heutigen Log filtern und dafür Sperreinträge erzeugen, die man in die | ||
.htaccess kopieren kann: | .htaccess kopieren kann: | ||
< | <syntaxhighlight lang=shell line> | ||
cat ${HOME}/var/web.log |cut -d ' ' -f2 |sort |uniq -c \ | cat ${HOME}/var/web.log |cut -d ' ' -f2 |sort |uniq -c \ | ||
|sed -e's/^ *//' | egrep '^[0-9]{5,} .*$' |cut -d ' ' -f 2 \ | |sed -e's/^ *//' | egrep '^[0-9]{5,} .*$' |cut -d ' ' -f 2 \ | ||
|xargs -n1 -r -I XXX echo "deny from XXX" | |xargs -n1 -r -I XXX echo "deny from XXX" | ||
</ | </syntaxhighlight> | ||
* Zeile 1: Log auswerten und IPs extrahieren und zählen | * Zeile 1: Log auswerten und IPs extrahieren und zählen | ||
Zeile 124: | Zeile 131: | ||
[[Kategorie:Glossar]] | [[Kategorie:Glossar]] | ||
[[Kategorie:Traffic]] | [[Kategorie:Traffic]] | ||
[[Kategorie:WebStatistik]] |
Aktuelle Version vom 28. Juni 2024, 11:16 Uhr
Als Traffic bezeichnet man Datenverkehr zwischen zwei Computersystemen.
Dies beinhaltet Web, Mail und FTP Verbindungen.
Traffic Ursachen erkennen
Hostsharing teilt per Mail mit, wenn der tägliche Durchschnitt an gebuchtem Traffic überschritten wurde. In der Mail steht, welches Paket den Traffic verursacht hat und die Warnung, dass Konsequenzen für die Monatsabrechnungen entstehen können. Wer nicht selbst die Ursachen des zusätzlichen Traffic kennt, kann sie mit folgenden Methoden ergründen:
Als erstes einfach mal den Log ansehen und durchscrollen.
less ~/var/web.log
less ~/var/web.log-yesterday
Da kann man oft schon alleine durch Ansehen gleichförmige Strukturen erkennen, z.B. massenhafte Login-Versuche auf einen Wordpress Blog, die sehr viel Traffic generieren.
Webzugriffe analysieren
Diese Idee von Michael Hierweck: Wie bekomme ich heraus, welche Web-Zugriffe für mein Traffic-Volumen maßgeblich verantwortlich sind?
cat $HOME/var/web.log |cut -d ' ' -f11 | grep -o '[0-9]*' | sort -n |uniq -c |sed -e's/^ *//' \
|while read FACTOR SUM; do
echo "$((${FACTOR} * ${SUM})) ${FACTOR} ${SUM}";
done |sort -n
- Zeile 1: Traffic aus dem Log extrahieren, sortieren, zählen.
- Zeile 2: über die Einträge wandern
- Zeile 3: Produkt aus Zugriffen und Einzelvolumen berechnen
- Zeile 4: Ausgabe von Produkt, Zugriffen und Einzelvolume je Zugriff
- Zeile 5: sortieren
Das Ganze als Einzeiler zum Kopieren, Einfügen und Ausführen im Terminal:
cat $HOME/var/web.log |cut -d ' ' -f11 | grep -o '[0-9]*' | sort -n |uniq -c |sed -e's/^ *//'|while read FACTOR SUM; do echo "$((${FACTOR} * ${SUM})) ${FACTOR} ${SUM}";done |sort -n
Dieser Skript gibt den Traffic aus, den gleichförmige Einzelzugriffe generieren, die größten Brocken stehen unten. Z.B.:
219558 6 36593
232288 14 16592
239998 22 10909
270812 2 135406
304520 5 60904
318248 14 22732
559062 14 39933
602760 20 30138
711496 8 88937
2325929 101 23029
2351668 29 81092
Ganz unten sieht man, dass 29 Zugriffe mit je 81092 Bytes zusammen 2351668 Bytes Traffic gekostet haben. In diesem Fall kann man nun ganz simpel im Log nach der dritten Zahl greppen und in less anzeigen, z.B. so:
grep 81092 $HOME/var/web.log | less
Wenn ich dieses Script öfter brauche ...
lohnt es sich, daraus ein kleines Programm zu machen. Dazu einfach
- Texteditor Eurer Wahl öffnen
- Script-Text hier kopieren und in den Editor einfügen
Hier noch mal eine etwas erweiterte Version
#!/bin/bash
echo ---------------------------------------------------------------
echo ------------- Top 10 Traffic_Verusacher heute -----------------
echo ---------------------------------------------------------------
echo Gesamtvolumen, Zugriffe, Einzelvolumen
cat $HOME/var/web.log |cut -d ' ' -f11 | grep -o '[0-9]*' | sort -n |uniq -c |sed -e's/^ *//' \
|while read FACTOR SUM; do
echo "$((${FACTOR} * ${SUM})) ${FACTOR} ${SUM}";
done |sort -n -r|head -10
echo
echo ---------------------------------------------------------------
echo ------------- Top 10 Traffic_Verusacher gestern ---------------
echo ---------------------------------------------------------------
echo
echo Gesamtvolumen, Zugriffe, Einzelvolumen
cat $HOME/var/web.log-yesterday |cut -d ' ' -f11 | grep -o '[0-9]*' | sort -n |uniq -c |sed -e's/^ *//' \
|while read FACTOR SUM; do
echo "$((${FACTOR} * ${SUM})) ${FACTOR} ${SUM}";
done |sort -n -r|head -10
echo
echo Sie koennen nun nach dem Versacher suchen, indem sie die
echo Logfiles des Tages nach dem Einzelvolumen durchsuchen
echo 'Befehl: grep 81092 $HOME/var/web.log | less'
- Script als Datei ohne Erweiterung unter einem griffigen Namen wie "volumenauswertung" speichern
- Scriptdatei in das Home-Verzeichnis des Paket-Users auf dem Server laden.
- Permission x zufügen, um das Skript ausführbar zu machen.(In WinSCP: Rechtsklick auf Datei, Eigenschaften-Dialog öffnen, X-Eigenschaft für den Eigentümer setzen)
Nun kann man dieses Script jederzeit mit ./volumenauswertung starten.
Wie erkenne ich, welche Webseite gestern am meisten Traffic Volumen hatte?
Dieser Einzeiler sollte es zeigen (Datum entsprechend ändern):
for f in ${HOME}/var/web-*-20230401*; do echo $f; gunzip -c $f | perl -nE '/\[.+\] ".+" \d+ (\d+)/; $sum += $1; END { printf("%.1f", $sum/1024/1024); print " MB\n"}'; done
Wie bekomme ich IPs mit massenhaften Web-Zugriffen erkannt und gesperrt?
IPs mit mehrstelligen Zugriffen werden so gefunden (Hier alle IPs mit vierstelligen Zugriffen, beachte die Ziffer 4 im Ausdruck "egrep '^[0-9]{4,} .*$'"):
cat ${HOME}/var/web.log |cut -d ' ' -f2 | sort | uniq -c |sed -e's/^ *//' | egrep '^[0-9]{4,} .*$'
Als Paketadmin alle IPs mit 10.000 und mehr Web-Zugriffen aus dem heutigen Log filtern und dafür Sperreinträge erzeugen, die man in die .htaccess kopieren kann:
cat ${HOME}/var/web.log |cut -d ' ' -f2 |sort |uniq -c \
|sed -e's/^ *//' | egrep '^[0-9]{5,} .*$' |cut -d ' ' -f 2 \
|xargs -n1 -r -I XXX echo "deny from XXX"
- Zeile 1: Log auswerten und IPs extrahieren und zählen
- Zeile 2: Filtern (Mit der Anweisung egrep '^[0-9]{5,} .*$' werden durch die Ziffer 5 nur die gefundenen Einträge mit einer fünfstelligen Anzahl von Zugriffen gefunden. Ändert man 5 in 4, werden analog alle Einträge mit vierstelligen Zugriffszahlen gefunden.
- Zeile 3: Einträge erzeugen