journalctl日志管理

systemd日志管理

systemd 提供了自己的日志系统(logging system),称为 journal。使用 systemd 日志,无需额外安装日志服务(syslog)。读取日志的命令:

# 读取systemd日志
journalctl

默认情况下(当 Storage= 在配置文件 /etc/systemd/journald.conf 中被设置为 auto),日志记录将被写入 /var/log/journal/;该目录是 systemd 软件包的一部分。若被删除,systemd 不会自动创建它,直到下次升级软件包时重建该目录。如果/var/log/journal/目录缺失,systemd 会将日志记录写入 /run/systemd/journal。这意味着,系统重启后日志将丢失


配置systemd journald日志持久存储

参考: https://thinkit.co.jp/story/2014/12/18/5389?page=0%2C1

CentOS7journald设置中,日志文件存放在 /run/log/journal 目录下。但是/run目录是tmpfs文件系统挂载的,当OS重启时,/run/log/journal目录下存储的日志文件会被删除。
为了在操作系统重启后也能保存日志,在journald配置文件/etc/systemd/journald.conf中指定“Storage=persistent”

# 配置日志持久存储
sed -i 's/^#Storage=auto/Storage=persistent/' /etc/systemd/journald.conf

# 限制日志容量为128MB
SystemMaxUse=128M

重启systemd-journald服务使配置生效

# 重启systemd-journald服务
systemctl restart systemd-journald

# 检查当前由journald管理的所有日志的容量
journalctl --disk-usage

在这里插入图片描述


日志大小限制

可以修改配置文件指定最大限制。如限制日志最大 50MiB:

# 修改全局配置文件
vim /etc/systemd/journald.conf

# 限制日志最大 50MiB
SystemMaxUse=50M

还可以通过子配置而不是全局配置文件进行设置:

# 修改子配置文件
vim /etc/systemd/journald.conf.d/00-journal-size.conf

# 限制日志最大 50MiB
[Journal]
SystemMaxUse=50M

配置rsyslogd和systemd journald

# 创建 持久化保存日志的目录
mkdir -p /var/log/journal
mkdir -p /etc/systemd/journald.conf.d

配置内容如下:

cat > /etc/systemd/journald.conf.d/99-prophet.conf << EOF
[Journal]
# 持久化保存到磁盘
Storage=persistent

# 压缩历史记录
Compress=yes

SyncIntervalSec=5m
RateLimitInterval=30s
RateLimitBurst=1000

# 最大占用空间
SystemMaxUse=10G

# 单文件最大200M
SystemMaxFileSize=200M

# 日志保存时间2周
MaxRetentionSec=2week

# 是否将日志转发到syslog
ForwardToSyslog=no
EOF

重新加载配置或重启systemd-journald服务

# 重启systemd-journald
systemctl restart systemd-journald

无法发现/var/log/journal目录

# 将Storage参数与更改成Storage=persistent
vim /etc/systemd/journald.conf

# 持久化方式存储日志
Storage=persistent

# 重启systemd-journald服务
systemctl restart systemd-journald

配置自动删除日志

https://linux.cn/article-15526-1.html

建议使用/etc/systemd/journald.conf这个journald 配置文件来控制日志文件的清理过程

systemd 提供了许多参数来有效管理日志文件。

journald.conf 参数描述实例
SystemMaxUse指定日志在持久性存储中可使用的最大磁盘空间SystemMaxUse=500M
SystemKeepFree指定在将日志条目添加到持久性存储时,日志应留出的空间量。SystemKeepFree=100M
SystemMaxFileSize控制单个日志文件在被轮换之前在持久性存储中可以增长到多大。SystemMaxFileSize=100M
RuntimeMaxUse指定在易失性存储中可以使用的最大磁盘空间(在 /run 文件系统内)。RuntimeMaxUse=100M
RuntimeKeepFree指定将数据写入易失性存储(在 /run 文件系统内)时为其他用途预留的空间数量。RuntimeMaxUse=100M
RuntimeMaxFileSize指定单个日志文件在被轮换之前在易失性存储(在 /run 文件系统内)所能占用的空间量。RuntimeMaxFileSize=200M

修改完配置文件,记得重启systemd-journald服务

# 重启服务
systemctl restart systemd-journald

journalctl查看日志

https://linux.cn/article-15544-1.html

journal读音:(ˈʤɜrnəl,周no)

# 显示尾部的最新10行日志
journalctl -n

# 显示尾部指定行数的日志
journalctl -n 20

# 实时滚动显示最新日志
journalctl -f

journalctl查看指定服务日志

参考: journalctl常见用法

# 查看指定service日志
journalctl -u 服务名
## 例如:docker起不来
journalctl -u docker

## -x 显示完整的日志信息,包括堆栈跟踪和其他相关信息
## -e 自动滚动到最新的日志条目。
## -u kubelet 指定了要查看的日志单元(unit)
journalctl -xeu kubelet

# 将日志保存为文件
journalctl -xeu kubelet > kubelet.log

# 动态查看日志(持续输出,类似于logs -f)
journalctl -eu kubelet -f

## 实时滚动显示某个Unit的最新日志
journalctl -u kubelet -f

# 只查看今天的kubelet日志
## |less可以解决日志显示不全的问题
journalctl -u kubelet --since today |less

# 合并显示多个 Unit 的日志
journalctl -u nginx.service -u php-fpm.service --since today

根据日期查看

# 只看今天的日志
journalctl --since today

# 查看指定时间的日志
journalctl --since="2021-10-02 22:00:00"

# 查看20分钟内的日志
journalctl --since "20 min ago"

# 显示昨天记录的所有系统日志
journalctl --since yesterday

# 显示从2015年1月10日开始到2015年1月11日3:00的所有系统日志
## --since和--until选项用于指定起始时间和结束时间
journalctl --since "2015-01-10" --until "2015-01-11 03:00"

# 显示从早上9点到1小时前记录的所有系统日志
journalctl --since 09:00 --until "1 hour ago"

查看指定用户的日志

# 查看指定用户的日志
journalctl _UID=33 --since today

查看指定命令的日志

# 查看指定命令的日志
journalctl /usr/bin/bash

在这里插入图片描述

# 查看systemd命令行的日志
journalctl /usr/lib/systemd/systemd

查看指定进程的日志

# 查看指定进程的日志
journalctl _PID=1

查看引导记录

# 查看引导记录
journalctl -b

# 查看系统本次启动的日志
sudo journalctl -b
sudo journalctl -b -0

# 查看上一次启动的日志(需更改设置)
sudo journalctl -b -1

journalctl删除日志

# 手工触发日志轮转切割
systemctl kill --kill-who=main --signal=SIGUSR2 systemd-journald.service

轮转日志文件

# 刷新日志缓冲区并轮转日志文件
## --flush:刷新日志缓冲区,将缓冲区中的日志写入磁盘
## --rotate:轮转日志文件,将当前日志文件重命名并创建个新的日志文件
journalctl --flush --rotate

删除指定时间之前的日志条目

# 删除1s以前的日志条目
journalctl --vacuum-time=1s

--vacuum-time数字后面提供以下后缀:

  • s:秒
  • m:分钟
  • h:小时
  • days:天
  • months:月
  • weeks:周
  • years:年

保留指定大小的最后日志文件

# 保留最后 400MB 的文件
journalctl --vacuum-size=400M

--vacuum-size数字后面提供以下后缀:

  • K:KB
  • M:MB
  • G:GB

保留指定数量的最后日志文件

# 保留最后2个日志文件
journalctl --vacuum-files=2

检查日志文件的完整性

清理完日志文件后,检查日志文件完整性是比较明智的。

# 检查日志文件的完整性
journalctl --verify

该命令显示了日志文件是否通过(PASS)、失败(FAIL)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

教Linux的李老师

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值