Systeemlogging is een belangrijk aspect van systeembeheer. Het wordt zowel gebruikt voor het opsporen van hardware-problemen als voor software-problemen in het systeem. Het speelt ook zeer belangrijke rol bij het controleren van de beveiliging en het reageren op incidenten. Systeem-daemons die niet in een terminal beheerd worden, loggen gewoonlijk informatie naar een systeemlogfaciliteit of een ander logbestand.
Deze sectie beschrijft hoe de FreeBSD systeemlogger, syslogd(8), te
configureren en te gebruiken, en behandelt logrotatie en logbeheer met
newsyslog(8). De focus ligt bij het opzetten en gebruiken van
syslogd
op een lokale machine. Meer geavanceerdere
opstellingen die een aparte loghost gebruiken staan in Paragraaf 29.11, “Hosts op afstand loggen met
syslogd
”.
In de standaardconfiguratie van FreeBSD wordt syslogd(8) gestart
tijdens het opstarten. Dit wordt bepaald door de variabele
syslogd_enable
in /etc/rc.conf
.
Er zijn vele toepassingsargumenten die het gedrag van syslogd(8)
beïnvloeden. Gebruik syslogd_flags
in
/etc/rc.conf
om ze te veranderen. Bekijk
syslogd(8) voor meer informatie over de argumenten, en
rc.conf(5), Paragraaf 12.3, “Hoofdinstellingen” en
Paragraaf 12.7, “Gebruik van rc met FreeBSD” voor meer informatie over
/etc/rc.conf
en het deelsysteem rc(8).
Het configuratiebestand, standaard
/etc/syslog.conf
, bepaalt wat syslogd(8) doet
met de logregels nadat ze eenmaal ontvangen zijn. Er zijn verschillende
parameters om de afhandeling van binnenkomende gebeurtenissen te
beheren, waarvan de twee basaalste faciliteit en
niveau zijn. De faciliteit beschrijft welk
deelsysteem het bericht genereerde, zoals de kernel of een daemon, het
niveau beschrijft de ernst van de opgetreden gebeurtenis. Dit maakt het
mogelijk om het bericht naar verschillende logbestanden te loggen, of
het weg te gooien, afhankelijk van de faciliteit en het niveau. Het is
ook mogelijk om actie te nemen afhankelijk van de toepassing dat het
bericht verstuurde, en in het geval van loggen op afstand, ook de
hostnaam van de machine dat het logbericht genereerde.
Het configureren van syslogd(8) is vrij rechttoe-rechtaan. Het
configuratiebestand bevat één regel per actie, de syntaxis
van elke regel is een selecteerderveld gevolgd door een actieveld. De
syntaxis van het selecteerderveld is
faciliteit.niveau
dat overeenkomt met
logberichten van faciliteit
op niveau
niveau
of hoger. Het is ook mogelijk om een
optionele vergelijkingsvlag voor het niveau toe te voegen om meer
precies te specificeren wat er gelogd wordt. Er kunnen meerdere
selecteerdervelden worden gebruikt voor dezelfde actie, ze worden
gescheiden door een puntkomma (;
). Het gebruik van
*
zal met alles overeenkomen. Het actieveld bepaalt
waar het logbericht naar toe wordt gezonden, zoals een bestand of een
loghost op afstand. Als voorbeeld is hier de standaard
syslog.conf
van FreeBSD:
# $FreeBSD$ # # Spaces ARE valid field separators in this file. However, # other *nix-like systems still insist on using tabs as field # separators. If you are sharing this file between systems, you # may want to use only tabs as field separators here. # Consult the syslog.conf(5) manpage. *.err;kern.warning;auth.notice;mail.crit /dev/console*.notice;authpriv.none;kern.debug;lpr.info;mail.crit;news.err /var/log/messages security.* /var/log/security auth.info;authpriv.info /var/log/auth.log mail.info /var/log/maillog
lpr.info /var/log/lpd-errs ftp.info /var/log/xferlog cron.* /var/log/cron *.=debug /var/log/debug.log
*.emerg * # uncomment this to log all writes to /dev/console to /var/log/console.log #console.info /var/log/console.log # uncomment this to enable logging of all log messages to /var/log/all.log # touch /var/log/all.log and chmod it to mode 600 before it will work #*.* /var/log/all.log # uncomment this to enable logging to a remote loghost named loghost #*.* @loghost # uncomment these if you're running inn # news.crit /var/log/news/news.crit # news.err /var/log/news/news.err # news.notice /var/log/news/news.notice !ppp
*.* /var/log/ppp.log !*
Komt overeen met alle berichten met een | |
Komt overeen met alle berichten van de faciliteit
| |
Deze regel gebruikt een vergelijkingsvlag, | |
Hier volgt een gebruiksvoorbeeld van een
programmaspecificatie. Dit zorgt ervoor dat de
regels alleen geldig zijn voor het programma in de
programmaspecificatie. In dit geval zorgen deze en de volgende
regel ervoor dat alle berichten van |
Dit voorbeeld toont dat er vele niveaus en deelsystemen zijn. De
niveaus zijn, in volgorde van meest naar minst kritisch:
emerg
, alert
,
crit
, err
,
warning
, notice
,
info
en debug
.
De faciliteiten zijn, in geen specifieke volgorde:
auth
, authpriv
,
console
, cron
,
daemon
, ftp
,
kern
, lpr
,
mail
, mark
,
news
, security
,
syslog
, user
,
uucp
en local0
tot en met
local7
. Let erop dat andere besturingssystemen
andere faciliteiten kunnen hebben.
Met deze kennis is het eenvoudig om een nieuwe regel aan
/etc/syslog.conf
toe te voegen om alles van de
verschillende daemons op niveau notice
en hoger naar
/var/log/daemon.log
te loggen:
daemon.notice /var/log/daemon.log
Bekijk syslog(3) en syslogd(8) voor meer informatie over
de verschillende niveaus en faciliteiten. Zie syslog.conf(5) en
Paragraaf 29.11, “Hosts op afstand loggen met
syslogd
” voor meer informatie over
syslog.conf
, de syntaxis, en geavanceerdere
gebruiksvoorbeelden.
Logbestanden hebben de neiging om snel te groeien en gestadig
opgehoopt te raken. Dit leidt tot bestanden die vol zitten met minder
direct bruikbare informatie en de harde schijf volmaken. Logbeheer
kan gebruikt worden om dit te beheersen. In FreeBSD wordt
newsyslog(8) gebruikt om logbestanden te beheren. Dit programma
wordt gebruikt om periodiek logbestanden te roteren en te comprimeren
en om optioneel ontbrekende logbestanden aan te maken en programma's
te signaleren dat logbestanden zijn verplaatst. De logbestanden hoeven
niet per sé van syslog afkomstig te zijn; newsyslog(8)
werkt met elke log van elk programma. Het is belangrijk om op te
merken dat newsyslog
normaliter vanuit cron(8)
wordt gedraaid en niet een systeem-daemon is. In de
standaardconfiguratie wordt het elk uur gedraaid.
Om te weten wat het moet doen leest newsyslog(8) zijn
configuratiebestand, standaard is dit
/etc/newsyslog.conf
. Dit configuratiebestand
bevat één regel voor elk bestand dat newsyslog(8)
beheert. Elke regel noemt de eigenaar van het bestand, rechten, en
wanneer dat bestand te roteren, alsook optionele vlaggen die de
logrotatie beïnvloeden (zoals compressie) en naar welke
programma's een signaal te sturen wanner de log is geroteerd. Als
voorbeeld is hier de standaard configuratie in FreeBSD:
# configuration file for newsyslog # $FreeBSD$ # # Entries which do not specify the '/pid_file' field will cause the # syslogd process to be signalled when that log file is rotated. This # action is only appropriate for log files which are written to by the # syslogd process (ie, files listed in /etc/syslog.conf). If there # is no process which needs to be signalled when a given log file is # rotated, then the entry for that file should include the 'N' flag. # # The 'flags' field is one or more of the letters: BCDGJNUXZ or a '-'. # # Note: some sites will want to select more restrictive protections than the # defaults. In particular, it may be desirable to switch many of the 644 # entries to 640 or 600. For example, some sites will consider the # contents of maillog, messages, and lpd-errs to be confidential. In the # future, these defaults may change to more conservative ones. # # logfilename [owner:group] mode count size when flags [/pid_file] [sig_num] /var/log/all.log 600 7 * @T00 J /var/log/amd.log 644 7 100 * J /var/log/auth.log 600 7 100 @0101T JC /var/log/console.log 600 5 100 * J /var/log/cron 600 3 100 * JC /var/log/daily.log 640 7 * @T00 JN /var/log/debug.log 600 7 100 * JC /var/log/init.log 644 3 100 * J /var/log/kerberos.log 600 7 100 * J /var/log/lpd-errs 644 7 100 * JC /var/log/maillog 640 7 * @T00 JC /var/log/messages 644 5 100 @0101T JC /var/log/monthly.log 640 12 * $M1D0 JN /var/log/pflog 600 3 100 * JB /var/run/pflogd.pid /var/log/ppp.log root:network 640 3 100 * JC /var/log/security 600 10 100 * JC /var/log/sendmail.st 640 10 * 168 B /var/log/utx.log 644 3 * @01T05 B /var/log/weekly.log 640 5 1 $W6D0 JN /var/log/xferlog 600 7 100 * JC
Elke regel begint met de naam van het bestand dat geroteerd moet
worden, optioneel gevolgd door een eigenaar en groep voor zowel de
geroteerde als nieuw aangemaakte bestanden. Het volgende veld,
mode
is de modus van de bestanden en
count
geeft aan hoeveel geroteerde logbestanden
bewaard moeten worden. De velden size
en
when
vertellen newyslog
wanneer
het bestand geroteerd moet worden. Een logbestand wordt geroteerd
wanneer òfwel de grootte meer is dan de waarde in het veld
size
, òfwel wanneer de tijd in het veld
when
is verstreken. *
geeft aan
dat dit veld genegeerd wordt. Het veld
flags
geeft newsyslog(8) verdere
instructies, zoals hoe het geroteerde bestand te comprimeren of om het
logbestand aan te maken als het ontbreekt. De laatste twee velden
zijn optioneel en specificeren het PID-bestand van een proces en
een naar dat proces te verzenden signaalnummer wanneer het bestand
wordt geroteerd. Raadpleeg newsyslog.conf(5) voor meer
informatie over alle velden, geldige vlaggen en hoe de rotatietijd te
specificeren. Herinner dat newsyslog
wordt
gedraaid vanuit cron
en niet vaker bestanden kan
roteren dan dat het gedraaid wordt vanuit cron(8).