大家好,又见面了,我是你们的朋友全栈君。
一、问题
机器的根目录太小,可清东西不多,查到/run/log/journal 以字符为名字的目录下有很多日志:
-rw-r—– 1 root systemd-journal 64M [2018-07-05 12:05] system@a034db77881a4a01ada06264851a12e4-000000000071f6ef-00056fd2a1351b60.journal
二、解决方法
1,直接清理单个日志:echo ” ” >日志名
2,配置保留时间,保留大小:
配置文件:/etc/systemd/journald.conf
MaxRetentionSec
SystemMaxUse
SystemMaxUse=
与 RuntimeMaxUse=
限制全部日志文件加在一起最多可以占用多少空间。 SystemKeepFree=
与 RuntimeKeepFree=
表示除日志文件之外,至少保留多少空间给其他用途
三、其配置项的含义 参考http://www.jinbuguo.com/systemd/journald.conf.html
Storage=
在哪里存储日志文件: “volatile
” 表示仅保存在内存中, 也就是仅保存在 /run/log/journal
目录中(将会被自动按需创建)。 “persistent
” 表示优先保存在磁盘上, 也就优先保存在 /var/log/journal
目录中(将会被自动按需创建), 但若失败(例如在系统启动早期”/var”尚未挂载), 则转而保存在 /run/log/journal
目录中(将会被自动按需创建)。 “auto
“(默认值) 与 “persistent
” 类似, 但不自动创建 /var/log/journal
目录, 因此可以根据该目录的存在与否决定日志的保存位置。 “none
” 表示不保存任何日志(直接丢弃所有收集到的日志), 但日志转发(见下文)不受影响。 默认值是 “auto
“
Compress=
默认值”yes”表示: 压缩存储大于特定阈值的对象。
Seal=
默认值”yes”表示:如果存在一个”sealing key”(由 journalctl(1) 的 --setup-keys
命令创建), 那么就为所有持久保存的日志文件启用 FSS(Seekable Sequential Key Generators)保护, 以避免日志文件被恶意或无意的修改。
SplitMode=
设置是否按照每个用户分割日志文件,以实现对日志的访问控制(日志守护进程会确保每个用户都能读取自己的日志文件)。 可以使用的分割策略如下: “uid
” 表示每个用户都有自己专属的日志文件(无论该用户是否拥有登录会话),但系统用户的日志依然记录到系统日志中。这是默认值。 “none
” 表示不对日志文件按不同用户进行分割,而是将所有日志都记录到系统日志中。这意味着非特权用户根本无法读取属于自己的日志信息。 注意,仅分割持久保存的日志(/var/log/journal
), 永不分割内存中的日志(/run/log/journal
)。
RateLimitIntervalSec=
, RateLimitBurst=
用于限制日志的生成速度(设为零表示不作限制)。 RateLimitIntervalSec=
用于设置一个时间段长度,默认值是30秒。 RateLimitBurst=
用于设置一个正整数,表示消息条数,默认值是1000条。 表示在 RateLimitIntervalSec=
时间段内, 每个服务最多允许产生 RateLimitBurst=
数量(条数)的日志。 在同一个时间段内,超出数量限制的日志将被丢弃,直到下一个时间段才能再次开始记录。 对于所有被丢弃的日志消息,仅用一条类似”xxx条消息被丢弃”的消息来代替。 这个限制是针对每个服务的限制,一个服务超限并不会影响到另一个服务的日志记录。 RateLimitIntervalSec=
可以使用下面的时间单位:”ms
“, “s
“, “min
“, “h
“, “d
“
SystemMaxUse=
, SystemKeepFree=
, SystemMaxFileSize=
, SystemMaxFiles=
, RuntimeMaxUse=
, RuntimeKeepFree=
, RuntimeMaxFileSize=
, RuntimeMaxFiles=
限制日志文件的大小上限。 以 “System
” 开头的选项用于限制磁盘使用量, 也就是 /var/log/journal
的使用量。 以 “Runtime
” 开头的选项用于限制内存使用量, 也就是/run/log/journal
的使用量。 以 “System
” 开头的选项仅在 /var/log/journal
目录确实存在且可写时才有意义。 但以 “Runtime
” 开头的选项永远有意义。 也就是说, 在系统启动早期 /var
尚未挂载时、 或者系统管理员禁止在磁盘上存储日志的时候, 仅有 “Runtime
” 开头的选项有意义。 journalctl 与 systemd-journald 工具会忽略日志目录中 所有后缀名不等于 “.journal
” 或 “.journal~
” 的文件。 换句话说, 日志目录中不应该存在后缀名不等于 “.journal
” 或 “.journal~
” 的文件, 因为这些文件永远不会被清理。
SystemMaxUse=
与 RuntimeMaxUse=
限制全部日志文件加在一起最多可以占用多少空间。 SystemKeepFree=
与 RuntimeKeepFree=
表示除日志文件之外,至少保留多少空间给其他用途。 systemd-journald 会同时考虑这两个因素, 并且尽量限制日志文件的总大小,以同时满足这两个限制。
SystemMaxUse=
与 RuntimeMaxUse=
的默认值是10%空间与4G空间两者中的较小者; SystemKeepFree=
与 RuntimeKeepFree=
的默认值是15%空间与4G空间两者中的较大者; 如果在 systemd-journald 启动时, 文件系统即将被填满并且已经超越了 SystemKeepFree=
或 RuntimeKeepFree=
的限制,那么日志记录将被暂停。 也就是说,如果在创建日志文件时,文件系统有充足的空闲空间, 但是后来文件系统被其他非日志文件过多占用, 那么 systemd-journald 只会立即暂停日志记录, 但不会删除已经存在的日志文件。
SystemMaxFileSize=
与 RuntimeMaxFileSize=
限制单个日志文件的最大体积, 到达此限制后日志文件将会自动滚动。 默认值是对应的 SystemMaxUse=
与 RuntimeMaxUse=
值的1/8 , 这也意味着日志滚动默认保留7个历史文件。
日志大小的值可以使用以1024为基数的 K, M, G, T, P, E 后缀, 分别对应于 1024, 1024², … 字节。
SystemMaxFiles=
与 RuntimeMaxFiles=
限制最多允许同时存在多少个日志文件, 超出此限制后, 最老的日志文件将被删除, 而当前的活动日志文件则不受影响。 默认值为100个。
MaxFileSec=
日志滚动的时间间隔。 通常并不需要使用基于时间的日志滚动策略, 因为由 SystemMaxFileSize=
与 RuntimeMaxFileSize=
控制的基于文件大小的日志滚动策略 已经可以确保日志文件的大小不会超标。 默认值是一个月, 设为零表示禁用基于时间的日志滚动策略。 可以使用 “year
“, “month
“, “week
“, “day
“, “h
“, “m
” 时间后缀, 若不使用后缀则表示以秒为单位。
MaxRetentionSec=
日志文件的最大保留期限。 当日志文件的最后修改时间超过此期限后将被删除。 默认值零表示不使用基于时间的日志删除策略。 通常并不需要使用基于时间的日志删除策略,因为由 SystemMaxUse=
与 RuntimeMaxUse=
控制的基于文件大小的日志滚动策略 已经可以确保日志文件的大小不会超标。 可以使用 “year
“, “month
“, “week
“, “day
“, “h
“, “m
” 时间后缀, 若不使用后缀则表示以秒为单位。
SyncIntervalSec=
向磁盘刷写日志文件的时间间隔,默认值是五分钟。 刷写之后,日志文件将会处于离线(OFFLINE)状态。 注意,当接收到 CRIT, ALERT, EMERG 级别的日志消息后, 将会无条件的立即刷写日志文件。 因此该设置仅对 ERR, WARNING, NOTICE, INFO, DEBUG 级别的日志消息有意义。
ForwardToSyslog=
, ForwardToKMsg=
, ForwardToConsole=
, ForwardToWall=
ForwardToSyslog=
表示是否将接收到的日志消息转发给传统的 syslog 守护进程,默认值为”no”。 如果设为”yes”,但是没有任何进程监听对应的套接字,那么这种转发是无意义的。 此选项可以被内核引导选项 “systemd.journald.forward_to_syslog
” 覆盖。 ForwardToKMsg=
表示是否将接收到的日志消息转发给内核日志缓冲区(kmsg),默认值为”no”。 此选项可以被内核引导选项 “systemd.journald.forward_to_kmsg
” 覆盖。 ForwardToConsole=
表示是否将接收到的日志消息转发给系统控制台,默认值为”no”。 如果设为”yes”,那么可以通过下面的 TTYPath=
指定转发目标。 此选项可以被内核引导选项 “systemd.journald.forward_to_console
” 覆盖。 ForwardToWall=
表示是否将接收到的日志消息作为警告信息发送给所有已登录用户,默认值为”yes”。 此选项可以被内核引导选项 “systemd.journald.forward_to_wall
” 覆盖。
MaxLevelStore=
, MaxLevelSyslog=
, MaxLevelKMsg=
, MaxLevelConsole=
, MaxLevelWall=
MaxLevelStore=
设置记录到日志文件中的最高日志等级,默认值为”debug
“; MaxLevelSyslog=
设置转发给传统的 syslog 守护进程的最高日志等级,默认值为”debug
“;MaxLevelKMsg=
设置转发给内核日志缓冲区(kmsg)的最高日志等级,默认值为”notice
“; MaxLevelConsole=
设置转发给系统控制台的最高日志等级,默认值为”info
“;MaxLevelWall=
设置作为警告信息发送给所有已登录用户的最高日志等级,默认值为”emerg
“; 这些选项既可以设为日志等级的名称, 也可以设为日志等级对应的数字: “emerg
“(0), “alert
“(1), “crit
“(2), “err
“(3), “warning
“(4), “notice
“(5), “info
“(6), “debug
“(7) 。 所有高于设定等级的日志消息都将被直接丢弃, 仅保存/转发小于等于设定等级的日志消息。 上述设置可以被如下内核引导选项覆盖: “systemd.journald.max_level_store=
“, “systemd.journald.max_level_syslog=
“, “systemd.journald.max_level_kmsg=
“, “systemd.journald.max_level_console=
“, “systemd.journald.max_level_wall=
“
ReadKMsg=
是否收集内核日志。 默认值 yes 表示从 /dev/kmsg
中读取内核产生的日志消息。
TTYPath=
指定 ForwardToConsole=yes
时所使用的控制台TTY, 默认值是 /dev/console
LineMax=
在将日志流转化为日志记录时,每条日志记录最大允许的长度(字节)。 如果将单元的标准输出(STDOUT)/标准错误(STDERR)通过流套接字连接到日志中, 那么将会以换行符(“n
“, ASCII 10)与NUL字符(“