---
title:  "Problemen oplossen door logs in te stellen"
excerpt: "De oorzaak van een probleem is niet altijd ver te zoeken. Begin daarom bij het begin; Instellen van jouw logs!"
coverImage: "/Logging/Logging.png"
date:   "2023-10-26T12:00:00.000Z"
author: Eli Winderickx
hero_image: /Logging.png
category: Journald,Logging,Linux
---
## Syslog
De eenvoudigste en meest gebruikte log methode is door middel van de `rsyslog` service. De configuratie zit volledig in `/etc/rsyslog.conf` en `/etc/rsyslog.d/`. Hierin kan je eenvoudig zeggen welke soort meldingen, met specifieke prioriteiten naar een bepaalde log locatie gaan.

### De verschillende logs

Faciliteiten

```markdown
| Code | Faciliteit | Omschrijving |
| ---- | ---------- | ------------ |
| 0 | kern | Kernel berichten |
| 1 | user | User-level berichten |
| 2 | mail | Mail systeem berichten |
| 3 | daemon | System daemon messages |
| 4 | auth | Authenticatie en beveiliging |
| 5 | syslog | Interne syslog berichten |
| 6 | lpr | Printer berichten |
| 7 | news | Netwerk berichten |
| 8 | UUCP | UUCP protocol berichten |
| 9 | cron | Berichten rond Cron |
| 10 | authpriv | Non-systeem authorizatie berichten |
| 11 | ftp | FTP protocol berichten |
| 16-23 | local0 - local7 | Aangepaste lokale berichten |
```

Prioriteiten
> Deze prioriteiten kan je ook gebruiken in Journald

```markdown
| Code | Prioriteit | Omschrijving |
| ---- | ---------- | ------------ |
| 0 | emerg | Het systeem is onbruikbaar |
| 1 | alert | Dringend actie vereist |
| 2 | crit | Kritieke toestand |
| 3 | err | Niet-kritieke toestand |
| 4 | warning | Waarschuwing |
| 5 | notice | Melding |
| 6 | info | Informatief |
| 7 | debug | Debugging informatie |
```

Door middel van een combinatie van zowel de Faciliteiten en de Prioriteiten, kunnen we een entry aanmaken in de `rsyslog` configuratie gevolgd door de locatie van een logbestand. Deze zal dan uitsluitend informatie over die specifieke faciliteit en die prioriteit en hoger dan je invult. Ook kan je een `*` gebruiken om ineens alle faciliteiten of prioriteiten te viseren. Als je dit combineert met andere faciliteiten (door middel van een `;` symbool) kan je ook `none` als prioriteit ingeven om specifieke faciliteiten te filteren.

/etc/rsyslog.d/local_info
```
local0.info /var/log/local_info
```

> vergeet niet de `rsyslog` service te herstarten na de aanpassing!

### Zoeken in rsyslog
We kunnen onze configuratie nu testen door middel van logger. Hiermee kunnen we een specifieke faciliteit en prioriteit meegeven om er voor te zorgen dat we een entry kunnen testen.

```bash
logger -p local0.info "Dit was een test"
```

Hierna kunnen we zoeken in `/var/log/local_info` met allerhande tools. Gebruik `tail -f` om de actuele entries te verzamelen of `grep <zoekopdracht>` om echt in het bestand te zoeken naar een specifieke entry.

## Journald
Dezelfde prioriteiten als bij rsyslog kunnen gebruikt worden. Veelal is de informatie in deze logs beperkt tot de services die door systemd beheert worden. Wat uiteindelijk wel een sterk groeiende lijst is. Een groot verschil met `rsyslog` is dat journald standaard geen logs bijhoudt op de harde schijf maar in het geheugen. Herstart de computer? Dan zijn de logs weg.

> Entries in `rsyslog` worden ook in journald gelogged!

Je kan dit wel eenvoudig aanpassen in `/etc/systemd/journald.conf`. Hier is namelijk een optie genaamd `Storage`. Als deze op `auto` staat, wat de standaard is, gaat journald kijken of /var/log/journal bestaat. Als dat niet het geval is, schrijft Journald alle info naar /run/log. Deze locatie bestaat dus enkel in het geheugen. De `Storage` optie kan je ook aanpassen naar `persistent`. Hiermee wordt door journald de juiste map aangemaakt. Vul je `volatile` in, gaat journald sowieso naar het geheugen schrijven.

### Zoeken in Journald
Ook hier kan je eenvoudig testen met een 'identifier' en 'prioriteit':
```bash
echo "Dit is mijn unieke error" | systemd-cat -t "My_Unique_identifier" -p info
```

Er zijn een aantal flags die je gaan helpen om de data te filteren. Standaard wordt er namelijk wel wat informatie gelogged in journald.

```bash
# Toon alle informatie
journalctl
# Toon info van sshd service
journalctl -u sshd.service
# Toon enkel Kritieke meldingen
journalctl -p crit
# Toon alle actuele entries
journalctl -f
# Toon info over de laatste opstart
# Werkt enkel als journald persistent werkt
journalctl -b1
# Toon enkel berichten van gisteren tot 4 uur geleden
journalctl -S "yesterday" -U "-4hours"
# Toon berichten met een specifieke rsyslog facility
journalctl --facility=user
# Zoek naar een specifieke tekst
journalctl -g "NetworkManager"
```

