Aufgabe 07 - Logdatei-Detektiv
Aufgabe 07 - Logdatei-Detektiv
Abschnitt betitelt „Aufgabe 07 - Logdatei-Detektiv“Worum geht es?
Abschnitt betitelt „Worum geht es?“Reguläre Ausdrücke im Ernstfall: Sie werten die Logdatei eines (fiktiven) Schulservers mit rund 500 Zeilen aus und beantworten Fragen, die von Hand nicht zu beantworten wären (siehe Kapitel Reguläre Ausdrücke). Die Auswertung von Logdateien gehört zu den häufigsten realen Einsätzen regulärer Ausdrücke, von der Fehlersuche bis zur Sicherheitsanalyse.
Was Sie dafür brauchen
Abschnitt betitelt „Was Sie dafür brauchen“- Kapitel Reguläre Ausdrücke, insbesondere benannte Gruppen und
findall; Aufgabe 06. - Sicherer Umgang mit Dictionaries, Listen und Sortierung.
- Die Datei
server.log(500 Zeilen, ein Betriebstag), Zeilenformat:2026-03-14 09:31:02 LOGIN user=amuster ip=10.0.3.17 status=OKmit den EreignissenLOGIN,LOGOUT,ERRORund den StatusOK/FAIL. Achtung: Die Datei stammt aus dem echten Betrieb und enthält auch Zeilen, die dem Format nicht entsprechen.
Welche Kompetenzen Sie erwerben und zeigen
Abschnitt betitelt „Welche Kompetenzen Sie erwerben und zeigen“- Sie parsen halbstrukturierte Textdaten robust mit einem Muster mit benannten Gruppen.
- Sie kombinieren Regex mit Datenstrukturen zu echten Auswertungen (Zählen, Ranglisten, Gruppierungen).
- Sie verwandeln Rohdaten in einen lesbaren, wiederverwendbaren Bericht.
Pädagogische Einordnung
Abschnitt betitelt „Pädagogische Einordnung“- Reproduktion: das Zeilenformat beschreiben und einzelne Zeilen mit einem gegebenen Ansatz zerlegen (Teil A).
- Reorganisation und Transfer: Muster und Datenstrukturen zu Auswertungen kombinieren (Teile B und C).
- Reflexion, Problemlösung und Urteilsbildung: Auffälligkeiten interpretieren, einen begründeten Verdacht formulieren und die Grenzen der Analyse beurteilen (Teil D).
Arbeitsaufträge
Abschnitt betitelt „Arbeitsaufträge“Die Übung ist auf etwa zwei Stunden ausgelegt. Teil D ist der Expertenteil.
Teil A - Erste Sichtung
Abschnitt betitelt „Teil A - Erste Sichtung“- Lesen Sie die Datei zeilenweise ein und geben Sie die Gesamtzahl der Zeilen aus.
- Zählen Sie mit einfachen String-Mitteln (
in), wie viele Zeilen das WortFAILenthalten. Notieren Sie den Wert; er dient später als Kontrollzahl. - Geben Sie die ersten fünf Zeilen aus, die
ERRORenthalten.
Teil B - Sauber parsen
Abschnitt betitelt „Teil B - Sauber parsen“- Entwickeln Sie ein Muster mit benannten Gruppen (
(?P<date>...),(?P<time>...),(?P<event>...),(?P<user>...),(?P<ip>...),(?P<status>...)), das eine komplette Zeile zerlegt. - Schreiben Sie
parse_line(line): liefert ein Dictionary mit den sechs Feldern oderNone, wenn die Zeile nicht dem Format entspricht. - Parsen Sie die ganze Datei: gültige Zeilen in eine Liste von Dictionaries, ungültige zählen und mit Zeilennummer sammeln, ohne Absturz. Wie viele ungültige Zeilen enthält die Datei?
Teil C - Die Ermittlungen
Abschnitt betitelt „Teil C - Die Ermittlungen“Beantworten Sie mit Code auf Basis der geparsten Daten:
- Wie viele fehlgeschlagene Logins (
LOGINmitFAIL) gibt es insgesamt? Vergleichen Sie mit Ihrer Kontrollzahl aus Teil A und erklären Sie eine allfällige Abweichung. - Welche drei Benutzer haben die meisten Fehlversuche? (Dictionary als Zähler, dann sortieren.)
- In welcher Stunde des Tages passieren die meisten Fehlversuche? (Die Stunde steckt in der Zeit-Gruppe.)
- Von welchen IP-Adressen kamen Fehlversuche für mehr als einen Benutzer?
Teil D - Expertenteil: Der Bericht
Abschnitt betitelt „Teil D - Expertenteil: Der Bericht“- Schreiben Sie
write_report(records, path): erzeugtreport.txtmit allen Antworten aus Teil C in lesbarer Form (Überschriften, Ranglisten, Zahlen). Die Funktion muss mit jeder Logdatei im selben Format funktionieren, ohne Codeänderung; fest verdrahtete Werte sind nicht zulässig. - Ergänzen Sie eine Abschnitt “Verdachtslage”: Formulieren Sie programmatisch einen Hauptverdacht (etwa die IP mit Fehlversuchen auf die meisten verschiedenen Benutzer) und begründen Sie das Kriterium im Bericht selbst.
- Härtetest: Erzeugen Sie von Hand eine zweite, kleine Logdatei mit fünf Zeilen, davon zwei fehlerhafte (falsches Datum, fehlendes Feld). Ihr Programm muss durchlaufen und die fehlerhaften Zeilen korrekt ausweisen.
- Beurteilen Sie in drei Sätzen: Welche Aussagen erlaubt diese Analyse, und warum wäre “Benutzer X wurde gehackt” als Schlussfolgerung unzulässig? (Stichwort: Indiz gegen Beweis.)
Wissenscheck
Abschnitt betitelt „Wissenscheck“- Warum ist ein Muster mit benannten Gruppen dem Zerschneiden mit
split(" ")hier überlegen? - Was soll ein Parser mit Zeilen tun, die dem Format nicht entsprechen, und was spricht gegen stilles Verwerfen?
- Wie sortiert man ein Dictionary mit Zählern nach den größten Werten?
- Ihre Auswertung liefert für dieselbe Frage zwei verschiedene Zahlen, je nach Methode (Teil A gegen Teil C). Welcher trauen Sie mehr, und warum?
- Warum gehört die Formatbeschreibung der Logdatei in die Dokumentation Ihres Programms?
detective.py, der erzeugte report.txt, Ihre Mini-Testdatei aus Teil D und die Antworten des Wissenschecks als Kommentar.