blog_hero_Problemen oplossen door logs in te stellen

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"