请启用 Javascript 以查看内容

journal log日志的问题

 ·  ☕ 3 分钟  ·  ✍ CNSRE

文章链接

前言

线上服务器磁盘告警
cnsre运维博客|Linux系统运维|自动化运维|云计算|运维监控
登录服务器检查磁盘发现一个叫做 journal 的文件夹占用了大量空间。

问题分析

Journald是什么

  • journalcentos7systemd 的一个组件,由 journald处理。捕获系统日志信息、内核日志信息,以及来自原始RAM磁盘的信息,早期启动信息以及所有服务中写入 STDOUTSTDERR 数据流的信息。可以说是为 Linux 服务器打造的一种新系统日志方式,这些日志信息写入到二进制文件,使用 journalctl 阅读,默认存放在 /run/log/ 下。

Journald系统主要由三个主要的系统日记服务组件组成

  • 守护程序:systemd 日志服务由 systemd-journald 守护程序处理。
  • 配置文件:日志服务的配置在 /etc/systemd/journald.conf 里面设置。
  • 日志搜索程序:用于搜索日记日志文件的程序是 journalctl

journalctl使用

journalctl 常用命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
journalctl               #查看所有日志
journalctl -n 5          #查看最后5条日志
journalctl -p err        #查看err类型的日志
journalctl -f            #不断输出最后10条日志
journalctl --since today #查看今天的日志
journalctl --since "2021-9-28 08:00:00" --until "2021-9-28 09:00:00"
journalctl -o verbose    #查看日志详细信息
journalctl --disk-usage  #检查当前journal使用磁盘量
journalctl --vacuum-time=2d #只保存2天的日志
journalctl --vacuum-size=500M #最大500M
journalctl --verify      #检查journal是否运行正常以及日志文件是否完整无损坏

持久保存日志

由于 journald 默认是保存在内存中,一旦服务器重启,就会丢失,作为生成环境,管理员必须保证系统任何日志不能丢失,通过修改配置文件做持久保存。
同时,systemd-journald.service 的配置文件主要参考 /etc/systemd/journald.conf 的内容,详细的参数可以参考如下

 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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
[Journal]
#日志存储到磁盘
Storage=persistent 
#压缩日志
Compress=yes 
#为日志添加序列号
Seal=yes 
#每个用户分别记录日志
SplitMode=uid 
#日志同步到磁盘的间隔,高级别的日志,如:CRIT、ALERT、EMERG 三种总是实时同步
SyncIntervalSec=1m 

#即制日志的最大流量,此处指 30s 内最多记录 100000 条日志,超出的将被丢弃
RateLimitInterval=30s 
#与 RateLimitInterval 配合使用
RateLimitBurst=100000

#限制全部日志文件加在一起最多可以占用多少空间,默认值是10%空间与4G空间两者中的较小者
SystemMaxUse=64G 
#默认值是15%空间与4G空间两者中的较大者
SystemKeepFree=1G 

#单个日志文件的大小限制,超过此限制将触发滚动保存
SystemMaxFileSize=128M 

#日志滚动的最大时间间隔,若不设置则完全以大小限制为准
MaxFileSec=1day
#日志最大保留时间,超过时限的旧日志将被删除
MaxRetentionSec=100year 

#是否转发符合条件的日志记录到本机的其它日志管理系统,如:rsyslog
ForwardToSyslog=yes 
ForwardToKMsg=no
#是否转发符合条件的日志到所有登陆用户的终端
ForwardToWall=yes 
MaxLevelStore=debug 
MaxLevelSyslog=err 
MaxLevelWall=emerg 
ForwardToConsole=no 
#TTYPath=/dev/console
#MaxLevelConsole=info
#MaxLevelKMsg=notice

处理过程

知道了这些,就可以轻松的处理这些日志了。
检查当前journal使用磁盘量

1
journalctl --disk-usage

清理方法可以采用按照日期清理,或者按照允许保留的容量清理,只保存2天的日志,最大500M

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

要启用日志限制持久化配置,可以修改

1
2
3
4
5
6
vim /etc/systemd/journald.conf
SystemMaxUse=16M
ForwardToSyslog=no

# 重启 
systemctl restart systemd-journald.service

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

1
journalctl --verify

文章链接

分享

CNSRE
作者
CNSRE
一个📚学习中的👨‍💻SRE运维工程师🚀🚀🚀


目录