Log fil styring.
Log rotation på Linux systemer er mere kompliceret, end du måske tror. Hvilke logfiler roteres, hvornår og hvor ofte, hvorvidt de roterede log filer skal komprimeres, og hvor mange forekomster af log filerne der bevares alt afhænger af indstillinger i konfigurationsfilerne.
Hvad er log rotation ?.
Logrotation er den proces, der omdøber en aktuel logfil (for eksempel auth.log bliver auth.log.1) og opretter en ny logfil (f.eks. Auth.log) for nye log poster. Afhængigt af antallet af filer, der skal bevares, kan vi muligvis se noget som logfil.6, der bliver logfil.7 (med den gamle logfil.7 forsvinder) og logfil.5 bliver logfil.6 osv., Før den nye log fil oprettes. De ældre log filer kan også komprimeres, især hvis de har tendens til at være meget store filer. Så, du kan se logfile.1.gz i stedet for logfile.1
Hvordan virker det ?
Logrotat værktøjet bruges almindeligt til at styre processen med log rotation, selvom log rotationen selv køres gennem cron.
De vigtige filer at være opmærksomme på er:
- /usr/sbin/logrotate – logrotate kommandoen selv (den eksekverbare)
- /etc/cron.daily/logrotate – shell scriptet, der kører logrotat dagligt
(bemærk at det kan være /etc/cron.daily/logrotate.cron på nogle systemer) - /etc/logrotate.conf – logrotations konfigurationsfilen
- /etc/logrotate.d – konfigurationsfiler til andre logs så som nginx og rsyslog og andre.
En anden vigtig ting at huske er at /etc/logrotate.d, inkluderet i processen gennem denne linje i filen /etc/logrotate.conf:
include /etc/logrotate.d
Du kan i mine eksempler se hvilken fil navne som bruges eks den første er /var/log/syslog som er syslog filen og fil navnet er syslog filen i root dir /var/log/ og osv osv.
Det er også vigtigt at huske at hvis du ændre i filen skal du reload config igen med en rsyslog reload som vist her.
$ sudo service rsyslog force-reload
Og så kan man check om det virkede som det skal med en status som vist her.
$ sudo service rsyslog status rsyslog.service - System Logging Service Loaded: loaded (/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2019-01-01 22:16:25 CET; 9s ago Docs: man:rsyslogd(8) http://www.rsyslog.com/doc/ Main PID: 26448 (rsyslogd) Tasks: 4 (limit: 4915) CGroup: /system.slice/rsyslog.service └─26448 /usr/sbin/rsyslogd -n Jan 01 22:16:25 work01 systemd[1]: Starting System Logging Service... Jan 01 22:16:25 work01 rsyslogd[26448]: imuxsock: Acquired UNIX socket '/run/systemd/journal/syslog' (fd 3) from systemd. [v8.32.0] Jan 01 22:16:25 work01 rsyslogd[26448]: rsyslogd's groupid changed to 106 Jan 01 22:16:25 work01 systemd[1]: Started System Logging Service. Jan 01 22:16:25 work01 rsyslogd[26448]: rsyslogd's userid changed to 102 Jan 01 22:16:25 work01 rsyslogd[26448]: [origin software="rsyslogd" swVersion="8.32.0" x-pid="26448" x-info="http://www.rsyslog.com"]
Du kan se at på linjen som vist med fed. at config er loaded for 9 sekunder siden, da jeg tastede kommanden ind. Så hvis der er ændriger i config filen bliver de brugt nu.
Hvis du bare vil have den skal rotatere log filern bruger du rotate som vist her.
$ sudo service rsyslog rotate * Closing open files rsyslogd [ OK ]
Parameterne i config filen betyder.
rotate 7 betyder den skal rotate hver 7 log fil. Og hvis der står daily så bliver der oprettet ebn ny log hver dag.
missingok betyder at det er ok filen ikke findes.
rotate beskriver for mange log filer som skal gemmes.
compress skal filerne pakkes.
notifempty rotere ikke tomme filer.
create 640 root adm Opret nye logfiler med sæt tilladelser/ejer/gruppe parametere
size beskriver max fil støres hvorefter log filen bliver rotateret.
delaycompress beskriver at den akrive log fil ikke skal pakkes.
Der er flere parametere som jeg ikke vil komme ind på her.
Eksemple på config fil.
/etc/logrotate.d/rsyslog
/var/log/syslog { rotate 7 daily missingok notifempty delaycompress compress postrotate invoke-rc.d rsyslog rotate > /dev/null endscript } /var/log/mail.info /var/log/mail.warn /var/log/mail.err /var/log/mail.log /var/log/daemon.log /var/log/kern.log /var/log/auth.log /var/log/user.log /var/log/lpr.log /var/log/cron.log /var/log/debug /var/log/messages { rotate 7 weekly missingok notifempty compress delaycompress sharedscripts postrotate invoke-rc.d rsyslog rotate > /dev/null endscript }