Debian Jessie с systemd: раздутые файлы журнала никогда не удаляются

778
Thom Nichols

У меня довольно стандартный минимальный дистрибутив Debian Jessie, в котором файлы журналов /var/logвращаются (на первый взгляд произвольно), но никогда не удаляются:

$ sudo du -sk /var/log/* | sort -rn 4167364 /var/log/daemon.log.1 1710535 /var/log/daemon.log 596240 /var/log/syslog.1 521091 /var/log/syslog 19905 /var/log/daemon.log.2.gz 15803 /var/log/syslog.4.gz 15187 /var/log/syslog.5.gz 14598 /var/log/syslog.7.gz 14595 /var/log/syslog.6.gz 14545 /var/log/syslog.3.gz 14496 /var/log/syslog.2.gz 1365 /var/log/messages.1 476 /var/log/kern.log.1 403 /var/log/messages 286 /var/log/lastlog 229 /var/log/auth.log.1 128 /var/log/syslog.1.gz 95 /var/log/auth.log 56 /var/log/wtmp 35 /var/log/debug.1 24 /var/log/faillog 19 /var/log/messages.2.gz 11 /var/log/kern.log.2.gz 3 /var/log/fsck 3 /var/log/debug.2.gz 3 /var/log/auth.log.2.gz 3 /var/log/apt 2 /var/log/kern.log 1 /var/log/sysstat 1 /var/log/dpkg.log 1 /var/log/dmesg 1 /var/log/alternatives.log 0 /var/log/debug 0 /var/log/btmp 

Теперь, из моего прочтения документации journald.conf, значение по умолчанию SystemKeepFreeсоставляет 15% и SystemMaxuse10%, поэтому я не понимаю, почему они становятся такими большими. Мое корневое монтирование на самом деле составляет всего 8 ГБ, поэтому я обнаружил это, потому что мое использование rootfs фактически достигло 100%:

$ df Filesystem 1K-blocks Used Available Use% Mounted on /dev/root 7529518 7525422 0 100% / .... 

Мне пришло в голову, что rsyslog может быть тем, кто записывает эти файлы, /var/logи есть запас/etc/ryslog.conf . Но тогда почему кажется, что файлы вращаются в некоторых случаях, но никогда не удаляются?

/etc/rsyslog.conf для справки:

$ cat /etc/rsyslog.conf  # /etc/rsyslog.conf Configuration file for rsyslog. # # For more information see # /usr/share/doc/rsyslog-doc/html/rsyslog_conf.html   ################# #### MODULES #### #################  $ModLoad imuxsock # provides support for local system logging $ModLoad imklog # provides kernel logging support #$ModLoad immark # provides --MARK-- message capability  # provides UDP syslog reception #$ModLoad imudp #$UDPServerRun 514  # provides TCP syslog reception #$ModLoad imtcp #$InputTCPServerRun 514   ########################### #### GLOBAL DIRECTIVES #### ###########################  # # Use traditional timestamp format. # To enable high precision timestamps, comment out the following line. # $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat  # # Set the default permissions for all log files. # $FileOwner root $FileGroup adm $FileCreateMode 0640 $DirCreateMode 0755 $Umask 0022  # # Where to place spool and state files # $WorkDirectory /var/spool/rsyslog  # # Include all config files in /etc/rsyslog.d/ # $IncludeConfig /etc/rsyslog.d/*.conf   ############### #### RULES #### ###############  # # First some standard log files. Log by facility. # auth,authpriv.* /var/log/auth.log *.*;auth,authpriv.none -/var/log/syslog #cron.* /var/log/cron.log daemon.* -/var/log/daemon.log kern.* -/var/log/kern.log lpr.* -/var/log/lpr.log mail.* -/var/log/mail.log user.* -/var/log/user.log  # # Logging for the mail system. Split it up so that # it is easy to write scripts to parse these files. # mail.info -/var/log/mail.info mail.warn -/var/log/mail.warn mail.err /var/log/mail.err  # # Logging for INN news system. # news.crit /var/log/news/news.crit news.err /var/log/news/news.err news.notice -/var/log/news/news.notice  # # Some "catch-all" log files. # *.=debug;\ auth,authpriv.none;\ news.none;mail.none -/var/log/debug *.=info;*.=notice;*.=warn;\ auth,authpriv.none;\ cron,daemon.none;\ mail,news.none -/var/log/messages  # # Emergencies are sent to everybody logged in. # *.emerg :omusrmsg:*  # # I like to have messages displayed on the console, but only on a virtual # console I usually leave idle. # #daemon,mail.*;\ # news.=crit;news.=err;news.=notice;\ # *.=debug;*.=info;\ # *.=notice;*.=warn /dev/tty8  # The named pipe /dev/xconsole is for the `xconsole' utility. To use it, # you must invoke `xconsole' with the `-file' option: #  # $ xconsole -file /dev/xconsole [...] # # NOTE: adjust the list below, or you'll go crazy if you have a reasonably # busy site.. # daemon.*;mail.*;\ news.err;\ *.=debug;*.=info;\ *.=notice;*.=warn |/dev/xconsole 

(ничего в /etc/rsyslog.d/)

Запас конф на /etc/systemd/journald.conf:

# This file is part of systemd. # # systemd is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. # # Entries in this file show the compile time defaults. # You can change settings by editing this file. # Defaults can be restored by simply deleting this file. # # See journald.conf(5) for details.  [Journal] #Storage=auto #Compress=yes #Seal=yes #SplitMode=uid #SyncIntervalSec=5m #RateLimitIntervalSec=30s #RateLimitBurst=1000 #SystemMaxUse= #SystemKeepFree= #SystemMaxFileSize= #SystemMaxFiles=100 #RuntimeMaxUse= #RuntimeKeepFree= #RuntimeMaxFileSize= #RuntimeMaxFiles=100 #MaxRetentionSec= #MaxFileSec=1month #ForwardToSyslog=yes #ForwardToKMsg=no #ForwardToConsole=no #ForwardToWall=yes #TTYPath=/dev/console #MaxLevelStore=debug #MaxLevelSyslog=debug #MaxLevelKMsg=notice #MaxLevelConsole=info #MaxLevelWall=emerg 

И я фактически добавил один файл в journald.conf.d:

$ cat /etc/systemd/journald.conf.d/custom.conf  # See: https://www.freedesktop.org/software/systemd/man/journald.conf.html # vi: ft=dosini  [Journal] MaxFileSec=0 SystemMaxUse=5M Compress=yes # Uncomment this to never write to FS: #Storage=volatile 

Таким образом, происходит некоторая ротация, но не всегда, и она не ограничивается тем, что, по словам Журнала, должно быть.

Обратите внимание, что я использую systemd-230 из jessie-backports.

Вопросы

  • Что уже вращает файлы?
  • Почему общее использование не ограничено, как ожидалось?
  • Journald на самом деле записывает эти файлы или это rsyslog? (На самом деле я не могу видеть ни одного другого места, в /varкотором journald хранит какие-либо данные, двоичные или иные.)
  • Могу ли я установить ограничения на размер файла в конфигурации rsyslog?
  • Нужно ли logrotate, чтобы сделать это для меня? Предпочли бы, чтобы journald или rsyslogd могли обрабатывать это напрямую.

Спасибо!

Обновление Несмотря на то, что документация journald.conf предлагает ForwardToSyslog=noпо умолчанию, если присмотреться к исходному файлу journald.conf, который я опубликовал, он говорит, что скомпилированное значение по умолчанию - ForwardToSyslog=yes. Похоже, что rsyslog делает это под/var/log

0

1 ответ на вопрос

1
ivanivan

logrotatedдействительно управляет этими журналами (для rsyslog и других). Но ... вы постоянно видите одни и те же имена файлов, что может быть тем, о чем вы думаете. Конфигурация по умолчанию - хранить 4 или 7 старых журналов и текущий журнал. Вот конфигурация по умолчанию - вы можете видеть, что / var / log / syslog будет хранить 7 плюс текущий журнал, остальные - 4.

debian@templatevm:~$ cat /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 4 weekly missingok notifempty compress delaycompress sharedscripts postrotate invoke-rc.d rsyslog rotate > /dev/null endscript } 

Если вы хотите повернуть, основываясь только на размере, вы измените dailyпараметр, size NNNNгде N - это размер с размером, таким как 100M - такsize 100M МБ, то есть ограничить до 100 МБ.

Затем, если ваши файлы журналов имеют тенденцию к быстрому росту, вы можете изменить частоту выполнения проверок logrotate, поместив /etc/cron.hourlyвместо него символическую ссылку/etc/cron.daily

Вот как /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 4 size 25M missingok notifempty compress delaycompress sharedscripts postrotate invoke-rc.d rsyslog rotate > /dev/null endscript }  
Ах, как-то я пропустил это; `which logrotate` позволил мне поверить, что он не был установлен, потому что я не делал` sudo which ..`! Благодарю. Таким образом, конфигурация logrotate по умолчанию не имеет каких-либо ограничений по размеру, но, по крайней мере, я знаю, где ее добавить. Спасибо! Thom Nichols 6 лет назад 0
Да, вы можете указать максимальный размер перед поворотом и т. Д. Если вы хотите это сделать, вы можете увеличить частоту, с которой вызывается logrotate ... Я преподавал PHP-класс, и, конечно, у студентов будут ошибки в бесконечных циклах, которые будет заполнять диск файлами журналов и делать сервер классов непригодным для использования, поэтому я начал делать ограничения по размеру и проверять / проверять необходимость вращения каждый час через cron. Я вернусь и отредактирую свой ответ, чтобы включить информацию об этом ... ivanivan 6 лет назад 1
Большой! Это все очень просто, моя главная путаница заключалась в том, что logrotate не был установлен, и я не заметил уже файлы конфигурации в `/ etc / logrotate.d /` - я предполагаю, что по умолчанию предполагается, что ваши файлы не собираются заполнить так быстро, что вы не можете обрабатывать 7 дней журналы! Thom Nichols 6 лет назад 0

Похожие вопросы