首页 > 其他分享 >journalctl 清理journal日志

journalctl 清理journal日志

时间:2023-07-11 19:46:34浏览次数:46  
标签:选项 文件 systemd journal journalctl 日志 默认值

在CentOS 7开始使用的systemd使用了journal日志,这个日志的管理方式和以往使用syslog的方式不同,可以通过管理工具维护。

使用df -h检查磁盘文件,可以看到/run目录下有日志目录/run/log/journal,占用了数G空间

Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root  8.5G  4.2G  4.4G  49% /
tmpfs                     16G  1.6G   15G  11% /run

在日志目录下有很多历史累积的日志。

检查当前journal使用磁盘量

journalctl --disk-usage

清理方法可以采用按照日期清理,或者按照允许保留的容量清理

journalctl --vacuum-time=2d
journalctl --vacuum-size=500M

如果要手工删除日志文件,则在删除前需要先轮转一次journal日志

systemctl kill --kill-who=main --signal=SIGUSR2 systemd-journald.service

要启用日志限制持久化配置,可以修改 /etc/systemd/journald.conf

SystemMaxUse=16M
ForwardToSyslog=no

然后重启

systemctl restart systemd-journald.service

检查journal是否运行正常以及日志文件是否完整无损坏

journalctl --verify

journal配置参考
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 [Journal] #Storage=auto #Compress=yes #Seal=yes #SplitMode=uid #SyncIntervalSec=5m RateLimitInterval=30s RateLimitBurst=500 SystemMaxUse=2048M #SystemKeepFree=1024M #SystemMaxFileSize= RuntimeMaxUse=2048M #RuntimeKeepFree= #RuntimeMaxFileSize= #MaxRetentionSec= #MaxFileSec=1month #ForwardToSyslog=yes ForwardToKMsgno=no #ForwardToConsole=no #ForwardToWall=yes #TTYPath=/dev/console MaxLevelStore=warning MaxLevelSyslog=warning MaxLevelKMsg=warning MaxLevelConsole=info #MaxLevelWall=emerg #LineMax=48K

 

 
 

配置目录及其优先级

默认设置是在编译期间确定的, 所以仅在确实需要修改默认设置的情况下, 才需要使用配置文件。位于 /etc/systemd/ 目录中的初始配置文件, 仅包含了展示选项默认值的注释, 目的在于方便系统管理员查看和直接修改。

如果软件包想要自定义某些默认设置, 那么必须将自定义的配置文件安装到 /usr/lib/systemd/*.conf.d/ 目录中。 /etc/ 目录仅供系统管理员使用。 系统管理员可以利用下面的逻辑来覆盖默认设置: 主配置文件最先被读取, 优先级也最低。 所有 *.conf.d/ 中的配置文件 都会覆盖主配置文件中的设置。 所有 *.conf.d/ 中的配置文件(无论位于哪个目录中), 统一按照文件名的字典顺序处理。 当多个配置文件都设置了同一个选项的时候: (1)如果该选项仅接受一个单一值,那么仅以文件名最靠后(字典顺序)的那一个为准; (2)如果该选项可接受一个值列表,那么将会按照文件名的字典顺序将所有值列表拼接起来。 为了便于排序, 建议给所有 *.conf.d/ 中的配置文件 都加上两位十进制数字的文件名前缀。

如果系统管理员想要屏蔽 /usr/lib/ 目录中的某个配置文件, 那么最佳做法是在 /etc/ 目录中 创建一个指向 /dev/null 的同名符号链接, 即可彻底屏蔽 /usr/lib/ 目录中的同名文件。

选项

所有选项都位于 "[Journal]" 小节:

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字符("\0", ASCII 0)作为分割符, 把日志流切分成一条条独立的日志记录。 如果超过此处设置的长度之后仍然没有遇到分割符, 那么将会自动插入一个分割符,以强制将单行超长日志截断为多行。 此选项的值越大,每个日志流客户端日志守护进程占用的内存也越大(最大值等于此选项的值)。 另外,此选项的值太大也会造成与传统日志传输协议的不兼容(太长的日志无法封装在单个 AF_UNIX 或 AF_INET 报文内)。 此选项的值以字节为单位,同时也可以在数字的末尾加上 K, M, G, T 后缀(以1024为基准)。 默认值 48K 是一个足够大并且也能保持与传统日志传输协议兼容的值。 注意,不能设为小于 79 的值(将被自动提升到79)。

日志转发

有两种不同的日志转发方法: (1)通过套接字文件(/run/systemd/journal/syslog) 可以将收集到的日志消息 立即转发给套接字的监听进程(传统的 syslog 守护进程)。 此方法受 ForwardToSyslog= 指令的控制。 (2)日志接收进程作为客户端运行,就像 journalctl(1) 一样读取日志文件。 因此,此方法在 Storage=none 时无效。 此方法不能实时读取日志消息, 但是可以读取先前保存的日志消息(例如在系统启动完成之后读取系统启动早期的日志消息)。 此方法还可以读取到完整的日志元数据。 此方法一般无法读取当前最新的日志消息, 只能读取已经被记录到文件系统上的日志消息。 注意,syslog 守护进程通常使用此方法(而不是前一种方法), 因此 Storage= 选项(而不是 ForwardToSyslog= 选项) 不应该设为"none"。

标签:选项,文件,systemd,journal,journalctl,日志,默认值
From: https://www.cnblogs.com/lkj371/p/17545733.html

相关文章

  • django 中 设置一个logging,来记录日志
    当你使用Django框架开发应用程序时,配置日志是一个重要的任务。以下是一步一步配置Django日志的示例:第1步:在你的Django项目中创建一个名为"logs"的文件夹,用于存储日志文件。第2步:在项目的根目录下的settings.py文件中,找到`LOGGING`配置项。如果该配置项不存在,请添加以下内容:```p......
  • web安全学习日志---xss漏洞(跨站脚本攻击)
    1.反射性xss(reflacted) 仅执行一次,非持久型。主要存在于攻击者将恶意脚本附加到url的参数中,发送给受害者,服务端未经严格过滤处理而输出在用户浏览器中,导致浏览器执行代码数据。利用场景:直接插入JS代码,修改url参数  攻<script>alert('hack')</script>防$name=str_replac......
  • Python的日志
    Python的日志,看上去啰啰嗦嗦的。请大神写了个通俗易懂简单方便通用的日志:importlogging#配置日志记录级别和输出方式logging.basicConfig(level=logging.DEBUG,filename='mylog.log',filemode='w',format='%(asctime)s-%(levelname)s-%(message)s')deflog_exceptio......
  • Spring Cloud Gateway 设置全局接口访问日志
    SpringCloudGateway设置全局接口访问日志虽然网关只做转发,但是对于每个转发的请求,我们都希望能够在日志中打印出请求的信息,网上版本很多,踩了很多坑,目前没找到完美的解决方案,最后我这个应该是大成版。希望对大家有用。先贴代码,再说遇到什么坑吧。/***@authorchenzhangx*@d......
  • 嵌入式log日志系统
    前言​ 还在上学的时候,对于嵌入式调试这一块来说,完全没有人教你如何去调试,还记得当时都是debug一步一步调试的,偶尔采用I/O控制LED等的效果来实现调试。​ 当时完全没有想到可以采用到串口进行调试,后来步入esp32后,才了解到原来串口是可以重新定向printf的输出串口log。再后来就......
  • 记录一个打印内存的日志函数
    在调试代码的时候,经常需要dump一段内存,有时候不得不自己动手写一个函数。现在先记录一个简单版本的内存打印函数。constchar*hexstr="0123456789ABCDEF";voiddump(intlevel,constchar*tag,constuint8_t*data,uint32_tlength){#define_CNT_PER_LINE(1<<4)......
  • java日志框架
    发展简图历程:使用logback+slf4j进行日志框架处理,出自一人之手,衔接更好! logback官网手册(英文):https://logback.qos.ch/manual/index.htmllogback中文手册:http://www.logback.cn/博客中文手册:https://blog.csdn.net/qq_26462567/article/details/115757354 ......
  • mysq事务、日志
    --实现事务的两种方式--关闭事务自动提交手动commit--开启事务然后提交--事务的四大特性--原子性(不可分割,要么全部成功,要么全部失败)--一致性(事务完成时,所有数据保证一致状态)--隔离性(数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运......
  • (MySQL)开启慢查询日志
    MySQL的慢查询日志默认没有开启,我们可以查看一下系统变量slow_query_log。showvariableslike'slow_query_log';修改/etc/my.ini如果要开启慢查询日志,需要在MySQL的配置文件(E:\ProgramData\MySQL\MySQLServer8.0\my.ini)中配置如下信息:#开启MySQL慢日志查询开关slow_......
  • kubelet编译和输出日志
    编译kubeletyuminstall-ygccgoenv-wGO111MODULE="off"cd$GOPATH/src/k8s.io/kubernetes/cmd/kubeletgoinstall-v替换kubeletsystemctlstopkubelet.servicemv/usr/bin/kubelet/usrmv$GOPATH/bin/kubelet/usr/binsystemctlstartkubelet.service......