# Logfiles und ihre Auswertung
Logfiles sind i.d.R. Textdateien, welche Ereignisse wie Installationen, Netzwerkverbindungen oder Dateiänderungen protokolliert. Das Anlegen und befüllen dieser Dateien und der enthaltenen Einträge erfolgt normalerweise automatisch und wird `Logging` genannt. Die Dateien liegen entweder als .txt oder .log Datei vor und können ggf. auch von der jeweiligen Software selbst angelegt werden.
### Arten von Logfiles
#### Eventlogs
Eventlogs erhalten Informationen über Fehler, Netzwerkverbindungen, Systemoperationen (hinzufügen oder entfernen von Dateien) oder fehlgeschlagene Anmeldeversuche.
Die Logs enthalten
- Art des Ereignisses
- die Ereignisquelle
- Zeitstempel
Unter Windows sind diese Logs in der Ereignisanzeige zu finden.
#### Messagelogs
Messagelogs können Daten zu Verbindungen und Kommunikation einzelner Anwender bzw. Systeme enthalten.
## Beispiele wichtiger Logfiles
### /var/log/
Globales Logfileverzeichnis der meisten Linux-Distributionen.
### /var/log/auth.log
Hier werden informationen zu Logins, Logouts, Authorisierungen und Sessions festgehalten.
### journald
> Systemd's Loggingmodul und wird ab Debian 12 Bookworm ständardmäßig statt `/var/log/syslog` verwendet. Selbe Grundfunktion, wie `/var/log/syslog`.
Journald sammelt und speichert Logdaten indiziert in einem Binärformat.
## Auswertung
### Darstellung
Grafana, Splunk oder Elastic Stack bieten grafische Oberflächen zum Auslesen und Visualisieren von Metriken auf basis der Logdaten. Mit diesen Tools können informationsreiche Dashboards erstellt werden, die komplexe Zusammenhänge verständlich und auf einen Blick erkennbar machen.
##### Linux Tools
Logfiles lassen sich in der Regel händisch auslesen. Man kann die meisten Logfiles in `/var/log` unter Linux mit `less` oder `grep` untersuchen. Journald-Logs hingegen lassen sich am einfachsten mit dem dedizierten Tool `journalctl` auslesen, da die Logdaten in einem Binärformat gespeichert werden.
##### Windows Ereignisanzeige
Unter Windows ist das vorhandene Mittel zum Anzeigen und Kategorisieren von Logfiles die Ereignisanzeige. Die entsprechenden Logfiles liegen dem Service hier im .evt Format vor und können von diesem automatisch Kategorisiert und nach Kritikalität bzw. Dringlichkeit sortiert werden.
Windows speichert die .evt Logs unter dem Verzeichnis Speicherpfad Logfiles: %SystemRoot%\System32\winevt\Logs
#### Kritikalität
Die Kritikalität beschreibt, wie schwerwiegend die Nachchricht ist.
Die meisten Tools zum Lesen von Logfiles (Ereignisanzeige, journalct, Grafana, ..) heben die Kritikalität von Nachrichten visuell hervor.
:::info
**Information**: Beispielsweise das Erfolgreiche Starten eines Dienstes bzw. eines Programms.
```
Package KB5032190 was successfully changed to the Installed state.
```
:::
:::warning
**Warning**: Der Hinweise, dass es zu einem Fehler aufgrund eines bestimmten Umstands, kommen könnte bzw. eine Auslastung vorliegt.
```
Intel(R) I211 Gigabit Network Connection
Network link is disconnected.
```
:::
:::danger
**Error**: Fehler beim Ausführen bzw. Betrieb eines Dienstes oder Programms.
```
Der Dienst "Steam Client Service" wurde aufgrund folgenden Fehlers nicht gestartet:
Der Dienst antwortete nicht rechtzeitig auf die Start- oder Steuerungsanforderung.
```
:::
:::danger
**Critical**: Absturz eines Programms oder Dienstes oder das unerwartete Abschalten des gesamten Systems.
```
Das System wurde neu gestartet, ohne dass es zuvor ordnungsgemäß heruntergefahren wurde. Dieser Fehler kann auftreten, wenn das System nicht mehr reagiert hat oder abgestürzt ist oder die Stromzufuhr unerwartet unterbrochen wurde.
```
:::
### Aggregation
Wie in RFC 5426 und RFC 6587 bechrieben, können Logdaten mit dem Syslog-Protokoll über das Netzwerk versendet werden und so auf einem zentralen Server aggregiert und ausgewertet werden. So werden Logdaten auf einem oder vielen Systemen zusammengeführt und sie dort zu verarbeiten.
### Verarbeitung
Um später datenbankähnliche Abfragen auf Daten aus den Logfiles zu ermöglichen müssen diese Verarbeitet werden. Tool hierfür sind Grafana Loki, Elastic Logstash und Splunk.
Loki zum Beispiel kann mit Regex sogenannte Labels aus Nachrichten auslesen. Diese Metadaten werden zur Indizierung der Logzeilen benutzt. Der Index wird in einer Datenbank gespeichert. Die Logzeilen hingegen werden komprimiert und in Blöcken in einem Speichersystem abgelegt. Dabei gibt es viele Möglichkeiten. Die Chunks können auf dem lokalen Dateisystem oder in einem System, wie Amazon S3, Google Cloud Storage, Apache Cassandra oder anderen gespeichert werden.
Grafana, Splunk oder Elastic Stack können solche Indizierten Logdaten dann mit Datenbankabfragen durchsuchen und anschließend Logdaten und Metadaten visualisiert Darstellen.
### Automatische Aktionen
Tools wie logsurfer und fail2ban erlauben es, mithilfe von Regex o.ä., Muster in Logfiles zu erkennen und Daten aus den Nachrichten im Logfile zu extrahieren und auf Basis dieser Daten Aktionen auszuführen.
Fail2ban zum Beispiel ermöglicht es, fehlgeschlagene Anmeldeversuche und andere Anfragen zu zählen und ab einem bestimmbaren Schwellwert Aktionen auszuführen, wie in etwa das Bannen (und spätere entbannen) der Quell-IP der Anfragen in der Firewall. Das Tool ist sehr flexibel und kann für viele andere Zwecke verwendet werden.
Verarbeitete Logfiles kann man je nach Datenspeicher mit Datenbankabfragen oder APIs abrufen/auswerten und in beliebigen Automatisierungstools (z.B. Ansible) das Erscheinen von bestimmten Nachrichten als Auslöser für Abläufe nutzen und Parameter aus den Logdaten in Autzmatisierungen verwenden.
# Fragen
1. Wie unterscheiden sich Nachrichten der Kritikalität `error` und `critical`?
2. In was für einem Format speichert Windows seine Logs?
3. Nenne ein Tool, das Visualisierungen auf Basis von Logdaten darstellen kann.
4. Warum werden Logdaten in modernen Tools indiziert und in Datenbanken gespeichert?
5. Mit welchem Tool kann man sich auf einfache Art und Weise gegen DDoS- und Bruteforce-Angriffe schützen?
6. Mit welchem Protokoll können Logdaten auf einem zentragen Server aggregiert werden?