Nachdem wir in den letzten Kapiteln Logs lesen, filtern und bereinigen konnten, geht es nun einen Schritt weiter: Wir wollen Daten analysieren. Mit awk kannst du Logdateien in Spalten zerlegen und daraus Werte zählen, summieren oder vergleichen.

🔹 Grundlagen von awk

  • awk behandelt jede Zeile als Datensatz.
  • Standardmäßig wird nach Whitespace (Leerzeichen/Tab) getrennt.
  • Spalten heißen $1, $2, $3 usw.
  • Aktionen stehen in {}.
Beispiel:
awk '{print $1}' access.log
👉 Gibt die erste Spalte (meist IP-Adressen) aus.

🔹 Felder im Apache-Access-Log

192.168.1.10 - - [24/Sep/2025:14:22:15 +0200] "GET /index.html HTTP/1.1" 200 532
  • $1 → IP-Adresse
  • $4 → Zeitstempel (beginnt mit [)
  • $6 → HTTP-Methode ("GET)
  • $7 → Pfad (/index.html)
  • $9 → Statuscode (200)
  • $10 → Größe (532)
👉 Damit kannst du z. B. die häufigsten Fehler oder IPs zählen.

🔹 Häufigste IPs ermitteln

awk '{print $1}' access.log | sort | uniq -c | sort -nr | head
👉 So findest du die „Top-IPs“, die am meisten Anfragen stellen.

🔹 Statuscodes zählen

awk '{print $9}' access.log | sort | uniq -c | sort -nr
Ausgabe (Beispiel):
120 200
 15 404
  5 500
👉 Zeigt: Die meisten Anfragen waren erfolgreich (200), einige waren Fehler (404, 500).

🔹 Meistbesuchte Seiten finden

awk '{print $7}' access.log | sort | uniq -c | sort -nr | head
Ausgabe:
80 /index.html
20 /about.html
15 /contact.html
👉 Zeigt, welche Seiten am beliebtesten sind.

🔹 Requests pro Stunde zählen

Der Zeitstempel steht in $4: [24/Sep/2025:14:22:15 Nur die Stunde extrahieren:
awk -F: '{print $2":00"}' access.log | sort | uniq -c
Ausgabe:
30 13:00
50 14:00
20 15:00
👉 So siehst du, wann der meiste Traffic war.

🔹 Durchschnittswerte berechnen (z. B. Antwortgröße)

awk '{sum+=$10; count++} END {print "Durchschnitt:", sum/count}' access.log
Ausgabe:
Durchschnitt: 487
👉 Berechnet die durchschnittliche Größe der Antworten.

🔹 Beispiel: Nur Fehlerzugriffe auswerten

awk '$9 ~ /^4|^5/ {print $1, $9}' access.log | sort | uniq -c | sort -nr | head
Ausgabe (gekürzt):
12 203.0.113.42 404
 5 203.0.113.42 500
 3 10.0.0.5     404
👉 Zeigt, welche IPs die meisten Fehler erzeugt haben.

🔹 Übungen

1. Zähle in einem Apache-Log:
  • Häufigste IP-Adresse
  • Häufigster Statuscode
  • Meistbesuchte Seite
2. Berechne die durchschnittliche Antwortgröße ($10). 3. Bonus: Finde heraus, wie viele Requests pro Tag stattfanden (Tipp: Datum aus $4 extrahieren).

✅ Zusammenfassung

  • awk verarbeitet Logs spaltenweise.
  • $1, $9, $7 sind besonders interessant in Webserver-Logs (IP, Statuscode, Pfad).
  • In Kombination mit sort | uniq -c kannst du schnell Häufigkeiten berechnen.
  • Mit awk-Ausdrücken lassen sich Summen, Durchschnitte und Muster (Regex) berechnen.
👉 Im nächsten Kapitel lernst du, wie man sed, grep, awk und weitere Tools kombiniert, um Logs noch präziser auszuwerten.  

📚 Inhaltsverzeichnis

👉 Log-Analyse Kapitel 1: Logs im Terminal lesen – cat, less, tail & grep 👉 Log-Analyse Kapitel 2: Filtern mit grep und regulären Ausdrücken 👉 Log-Analyse Kapitel 3: Logs bereinigen mit sed – inkl. Mehrdatei-Änderungen 👉 Log-Analyse Kapitel 4: Logs analysieren mit awk 👉 Log-Analyse Kapitel 5: Logs kombinieren mit grep, sed, awk, sort, uniq & cut 👉 Log-Analyse Kapitel 6: Praxisprojekt – Apache-/Nginx-Access-Logs analysieren 👉 Log-Analyse Kapitel 7: Praxisprojekt – Systemlogs analysieren (auth.log & journalctl)

⭐ Bonus-Kapitel

👉 Log-Analyse Kapitel 8 (Bonus): Eigene Auswertungs-Skripte für Logs schreiben 👉 Log-Analyse Kapitel 9 (Bonus): Logs visualisieren mit CSV & gnuplot