Ich benutze gern tab in logs als Separator. Das macht die Analyse mit solchen tools als awk wirklich viel leichter.
Für diese Aufgabe benutze ich also nen kleinen Script awkt.
Das Befehlformat ist:
awkt [s] [1] [2] ...
s - optionaler Parameter, rechnet, sortiert und löscht identische Zeilen
1,2 usw. - die Spaltennummer in der Logs-Zeile, die man ausgeben möchte

Das Logs-Format für Nginx sieht bei mir so aus:
log_format main	'$remote_addr	$geo	"$remote_user"	[$time_local]	'
	'"$request"	$status	$bytes_sent	'
	'$backend	$upstream_response_time	"$http_referer"	'
	'"$http_user_agent"	$gzip_ratio';
Die Daten treffen über pipe ein. Der Befehl ist:
cat access.log | awkt 5 6
gibt zwei Spalten mit der Anfrage ($request) und dem Statuscode ($status) aus.
Wenn so:
cat access.log | awkt s 9 5
dann kann man die Verteilung der Generierungszeit nach gefragten Seiten sehen.

Es ist möglich, blitzschnell folgendes durchzuführen:
  1. die Verteilung der Anfragen nach Länder
    cat access.log | awkt s 2
    Als Beispiel, das Ergebnis:
    [skip]
        276 ES
        321 IT
        463 UA
        502 GB
        510 FR
       1025 SE
       1303 NL
       1904 RU
       3598 DE
      21472 US
  2. die Menge der Anfragen, die dem backend übergeben oder von statischem Cache abgegeben wurde ($backend)
    cat access.log | awkt s 8
    Das Ergebnis:
      13670 0
      20767 1
  3. die Menge der Anfragen von einer IP-Adresse mit User-Agent zusammen
    cat access.log | awkt s 1 11
    Das Ergebnis:
    [skip]
        353 208.36.144.9   "Mozilla/5.0 (Twiceler-0.9 http://www.cuil.
    	com/twiceler/robot.html)"
        473 67.195.37.108  "Mozilla/5.0 (compatible; Yahoo! Slurp/3.0;
    	 http://help.yahoo.com/help/us/ysearch/slurp)"
        694 67.195.37.108  "Mozilla/5.0 (compatible; Yahoo! Slurp;
    	 http://help.yahoo.com/help/us/ysearch/slurp)"
        976 78.46.75.108   "Mozilla/5.0 (compatible; heritrix/${pom.
    	version} +http://seekda.com)"
       1700 66.249.71.47   "Mozilla/5.0 (compatible; Googlebot/2.1;
    	 +http://www.google.com/bot.html)"
       1720 66.249.71.46   "Mozilla/5.0 (compatible; Googlebot/2.1;
    	 +http://www.google.com/bot.html)"
       1769 66.249.71.45   "Mozilla/5.0 (compatible; Googlebot/2.1;
    	 +http://www.google.com/bot.html)"
       3084 66.150.96.121  "FeedBurner/1.0 (http://www.FeedBurner.com)"
    Die Bots sind selbstverständlich auf dem ersten Platz :)
    Wenn man es mit anderen Befehlen verbindet, ist möglich einen "Beobachter" in cron zu stellen und besonders freche Benutzer in iptables zu blockieren (klar, ausgeschlossen Google usw.)
    tail -n 1000 access.log | grep -v -E "FeedBurner|Yahoo|Google|
    msnbot|Yandex" | awkt s 1 | awk '{if($1 > 100) print $2}' |
     while read ip; do iptables -A INPUT -s $ip -j TARPIT; done;
    (wenn Ihr iptables keinen Modul TRAPIT enthält, kann man einfachen DROP nehmen)
    P.S. in solchen Fällen lieber limit_req_zone, limit_conn, limit_zone selbst in Nginx oder limit in iptables benutzen
  4. Generierungszeit
    cat access.log | awkt s 9
    Das Ergebnis:
    [skip]
        409 0.003
        474 0.009
        491 0.047
        648 0.045
        697 0.044
        770 0.010
        837 0.024
       1112 0.001
       1258 0.043
       1908 0.002
      13952 -
    So kann man dann ein Diagramm bauen:
    cat access.log | awkt 9 | sort | uniq -c
    Wenn man es mit $request verbindet, kann man feststellen, welche Seiten langsam sind:
    cat access.log | awkt 9 5 | sort -n
    Das Ergebnis:
    [skip]
    0.947   "POST /XXX HTTP/1.1"
    0.948   "GET /XXX HTTP/1.1"
    1.064   "GET /XXX HTTP/1.1"
    1.153   "POST /XXX HTTP/1.0"
    1.161   "GET /XXX HTTP/1.1"
  5. Die Seiten, die am meisten angefragt werden
    cat wipmania.log | awkt s 5
    Das Ergebnis:
    [skip]
        548 "GET /XXX HTTP/1.1"
        628 "GET / HTTP/1.0"
        736 "GET /XXX HTTP/1.1"
        860 "GET /XXX HTTP/1.1"
       1244 "GET /XXX HTTP/1.1"
       1687 "GET / HTTP/1.1"
  6. Welche Web-Seite hat am meisten Traffic gegeben
    cat wipmania.log | awkt s 10
    Das Ergbenis:
    [skip]
        442 "http://www.A.com/A"
        459 "http://www.B.com/B"
        708 "http://www.C.com/C"
        760 "http://www.D.com/D"
      25338 "-"
Damit kann man noch wirklich viele interessanten Dinge machen!..

5 Votes | Average: 5 out of 55 Votes | Average: 5 out of 55 Votes | Average: 5 out of 55 Votes | Average: 5 out of 55 Votes | Average: 5 out of 5 (5 votes, average: 5 out of 5)
Loading ... Loading ...

Top Posts: