Kunden können nachts nicht zahlen
In einem Webshop gehen nachts keine Kartenzahlungen mehr durch. Niemand hat etwas geändert. Die Inhaberin ruft Sie beim Frühstück an.
Sie raten nicht. Sie öffnen das Log. Es sagt, was die Maschine getan hat, und wann.
Am Ende dieser Lektion
Notiz
Ich kann in einem Log finden, was schiefgelaufen ist.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Log | eine Datei, in die ein Programm schreibt, was es getan hat | |
| Logzeile | ein Eintrag: eine Zeit, eine Quelle und eine Meldung | |
| Zeitstempel | Datum und Uhrzeit auf einer Logzeile | |
| Filter | nur die Zeilen behalten, die Sie interessieren | grep |
| Zeitleiste | Ereignisse aus vielen Logs in zeitlicher Reihenfolge | |
| Beleg | eine Logzeile, die Ihre Aussage stützt |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Eine Logzeile hat Teile
Maschinen schreiben Logs nach einem festen Muster, damit Werkzeuge sie lesen können. Lernen Sie das Muster einmal, dann ist jede Zeile leicht.
Eine Zeile des Anmeldelogs nennt Datum und Uhrzeit, die Maschine, das Programm und eine Meldung. Die Meldung enthält die Fakten: wer es versuchte, von wo, und ob es klappte.
Die Belege in diesem Lab
ls caseHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Wie viele Zeilen hat das Anmeldelog?
wc -l case/var/log/auth.logHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die ersten zwei Zeilen des Weblogs
head -n 2 case/var/log/nginx/access.logHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die letzten drei Zeilen des Weblogs
tail -n 3 case/var/log/nginx/access.logHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein Beispiel: eine Zeile des Weblogs
| Teil | Beispiel | Bedeutung |
|---|---|---|
| Adresse | 192.0.2.77 | Wer gefragt hat |
| Zeit | [14/Oct/2026:00:01:49 +0000] | Wann |
| Anfrage | "GET /login HTTP/1.1" | Was verlangt wurde |
| Status | 200 | Die Antwort: 200 erfolgreich, 404 nicht gefunden, 403 verweigert |
| Größe | 2557 | Gesendete Bytes |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Erst filtern, dann zählen
grep behält die Zeilen, die bestimmte Wörter enthalten. grep -c zählt sie, statt sie auszugeben.
Um nach einer Spalte zu zählen, schneiden Sie die Spalte mit awk aus, sortieren sie und lassen uniq -c die gleichen Werte zählen. Ein zweites sort -rn stellt die größte Zahl nach oben.
Die fehlgeschlagenen Passwörter zählen
grep -c "Failed password" case/var/log/auth.logHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die angenommenen Anmeldungen zählen
grep -c "Accepted" case/var/log/auth.logHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Das Weblog nach Statuscode zählen
awk '{print $9}' case/var/log/nginx/access.log | sort | uniq -cHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein kleiner Auszug zum Lesen
Oct 14 02:11:03 web01 sshd[2211]: Invalid user admin from 198.51.100.7 port 4410
Oct 14 02:11:03 web01 sshd[2211]: Failed password for invalid user admin from 198.51.100.7 port 4410 ssh2
Oct 14 02:11:09 web01 sshd[2214]: Failed password for root from 198.51.100.7 port 4418 ssh2
Oct 14 02:14:40 web01 sshd[2230]: Accepted password for alice from 192.0.2.10 port 5120 ssh2
Ein Beispiel: nach Adresse zählen
| Schritt | Was er tut | Ergebnis für den Auszug |
|---|---|---|
| 1 | Die Zeilen mit Failed password behalten | 2 Zeilen |
| 2 | Die Adresse nach „from“ ausschneiden | 198.51.100.7 zweimal |
| 3 | Jede Adresse zählen | 198.51.100.7: 2 |
| 4 | Nach einer Zeile mit Accepted von ihr suchen | Keine, sie kam also nie hinein |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein häufiger Fehler
Warnung
Viele glauben, die Adresse mit den meisten Fehlversuchen sei die, die hineingekommen ist. Fehlschläge und Erfolge sind verschiedene Zeilen. Eine Adresse kann tausendmal scheitern und nie Erfolg haben. Suchen Sie immer eine Erfolgszeile und prüfen Sie, ob sie von der verdächtigen Adresse kam.
Eine Zeitleiste verbindet die Logs
Ein Log erzählt selten die ganze Geschichte. Legen Sie Ereignisse aus mehreren Logs in zeitliche Reihenfolge. Dann sehen Sie, was zuerst geschah.
Das erste Ereignis zählt am meisten. Alles danach kann eine Folge davon sein.
Ein Beispiel: eine Zeitleiste
| Zeit | Quelle | Ereignis |
|---|---|---|
| 02:11 | Anmeldelog | Viele fehlgeschlagene Passwörter von einer Adresse |
| 02:14 | Anmeldelog | Eine Anmeldung für alice von einer anderen Adresse angenommen |
| 02:16 | Weblog | Eine Anfrage nach einer Admin-Seite, beantwortet mit 200 |
| 02:30 | Cron-Log | Ein neuer Job läuft zum ersten Mal |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein Log verfolgen und ein langes lesen
Tippen Sie tail -f und den Namen eines Logs, um neue Zeilen ankommen zu sehen. Mit Strg+C hören Sie auf. Eine Schaltfläche kann kein Strg+C drücken, tippen Sie diesen Befehl deshalb selbst.
Tippen Sie less und den Namen eines Logs, um eine lange Datei seitenweise zu lesen. Mit / und einem Wort suchen Sie, mit q verlassen Sie less.
Weiterführend
Im Weblog ist Spalte 7 die angefragte Seite. Bauen Sie eine Pipeline, die nur die Zeilen mit 404 behält, Spalte 7 ausschneidet und jede Seite zählt.
Sortieren Sie so, dass die größte Zahl oben steht, und behalten Sie die ersten drei. Sagen Sie dann in einem Satz, welche Art von Besucher nach Seiten fragt, die es nicht gibt.