Problemen oplossen door logs in te stellen
Oct 26 2023
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
| 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
| 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.
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':
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.
# 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"