Debian Jessie с systemd: раздутые файлы журнала никогда не удаляются
809
Thom Nichols
У меня довольно стандартный минимальный дистрибутив Debian Jessie, в котором файлы журналов /var/logвращаются (на первый взгляд произвольно), но никогда не удаляются:
Теперь, из моего прочтения документации 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
1 ответ на вопрос
1
ivanivan
logrotatedдействительно управляет этими журналами (для rsyslog и других). Но ... вы постоянно видите одни и те же имена файлов, что может быть тем, о чем вы думаете. Конфигурация по умолчанию - хранить 4 или 7 старых журналов и текущий журнал. Вот конфигурация по умолчанию - вы можете видеть, что / var / log / syslog будет хранить 7 плюс текущий журнал, остальные - 4.
Если вы хотите повернуть, основываясь только на размере, вы измените dailyпараметр, size NNNNгде N - это размер с размером, таким как 100M - такsize 100M МБ, то есть ограничить до 100 МБ.
Затем, если ваши файлы журналов имеют тенденцию к быстрому росту, вы можете изменить частоту выполнения проверок logrotate, поместив /etc/cron.hourlyвместо него символическую ссылку/etc/cron.daily
Вот как /etc/logrotate.d/rsyslogможет выглядеть ваш новый файл
Ах, как-то я пропустил это; `which logrotate` позволил мне поверить, что он не был установлен, потому что я не делал` sudo which ..`! Благодарю. Таким образом, конфигурация logrotate по умолчанию не имеет каких-либо ограничений по размеру, но, по крайней мере, я знаю, где ее добавить. Спасибо!
Thom Nichols 7 лет назад
0
Да, вы можете указать максимальный размер перед поворотом и т. Д. Если вы хотите это сделать, вы можете увеличить частоту, с которой вызывается logrotate ... Я преподавал PHP-класс, и, конечно, у студентов будут ошибки в бесконечных циклах, которые будет заполнять диск файлами журналов и делать сервер классов непригодным для использования, поэтому я начал делать ограничения по размеру и проверять / проверять необходимость вращения каждый час через cron. Я вернусь и отредактирую свой ответ, чтобы включить информацию об этом ...
ivanivan 7 лет назад
1
Большой! Это все очень просто, моя главная путаница заключалась в том, что logrotate не был установлен, и я не заметил уже файлы конфигурации в `/ etc / logrotate.d /` - я предполагаю, что по умолчанию предполагается, что ваши файлы не собираются заполнить так быстро, что вы не можете обрабатывать 7 дней журналы!
Thom Nichols 7 лет назад
0