CentOS 7 系统日志管理:深入理解 journalctl 与 journald

在 CentOS 7 系统中,journalctl 是一个强大的命令行工具,用于查询和分析由 systemd-journald 服务收集的系统日志。systemd-journaldsystemd 系统和服务管理器的一部分,负责日志的收集、存储和转发。本文将深入探讨如何使用 journalctl 进行日志查询,以及如何配置和管理 systemd-journald 服务以优化日志系统的性能和存储。

精确匹配日志记录

journalctl 支持使用字段和值的格式 FIELD=VALUE 来精确匹配日志记录。例如,要查询 crond.service 的日志,可以使用以下命令:

bash 复制代码
[root@master ~]# journalctl _SYSTEMD_UNIT=crond.service

日志记录包含多个字段,如 MESSAGEMESSAGE_ID_PID_UID_HOSTNAME_SYSTEMD_UNIT 等。这些字段可以通过 man systemd.journal-fields 查看。

应用多个匹配条件

当需要对同一字段应用多个匹配条件时,可以连续使用匹配字段:

bash 复制代码
[root@master ~]# journalctl _SYSTEMD_UNIT=crond.service _SYSTEMD_UNIT=docker.service

组合多个匹配条件

使用 + 符号可以对多个匹配字段执行操作:

bash 复制代码
[root@master ~]# ps -ef|grep crond
fengji       535 38453  0 14:32 pts/2    00:00:00 grep --color=auto crond
fengji      9639     1  0 May15 ?        00:00:19 /usr/sbin/crond -n

# 匹配PID执行
[root@master ~]# journalctl _PID=9639
# 多个匹配字段执行操作
[root@master ~]# journalctl _PID=9639 + _SYSTEMD_UNIT=docker.service

日志持久化存储

systemd-journald 服务默认将日志保存在 /run/log 目录中,系统重启后日志将丢失。为了持久化保存日志,可以采用以下两种方法:

  1. 创建 /var/log/journal 目录并重启日志服务。
  2. 修改 /etc/systemd/journald.conf 配置文件,将 Storageauto 改为 persistent,然后重启日志服务。

创建持久化存储目录

bash 复制代码
[root@master ~]# sudo mkdir /var/log/journal
[root@master ~]# sudo chown root:systemd-journal /var/log/journal
[root@master ~]# sudo chmod 2775 /var/log/journal
[root@master ~]# sudo systemctl restart systemd-journald.service

日志数据清理

journalctl 提供了 -vacuum-size-vacuum-time 选项来清理日志数据,帮助管理磁盘空间。

按大小清理日志

bash 复制代码
# 查看日志占据的磁盘空间
[root@master ~]#  sudo journalctl --disk-usage
# 清理日志
[root@master ~]#  sudo journalctl --vacuum-size=1G

按时间清理日志

bash 复制代码
[root@master ~]# sudo journalctl --vacuum-time=1d

配置日志容量限制

通过编辑 /etc/systemd/journald.conf 文件,可以设置以下参数来限制日志所能占用的最高容量和日志数据体积的膨胀速度:

  • SystemMaxUse:指定 journal 所能使用的最高持久存储容量。
  • SystemKeepFree:指定 journal 在添加新条目时需要保留的剩余空间。
  • SystemMaxFileSize:控制单一 journal 文件大小。
  • RuntimeMaxUse:指定易失性存储中的最大可用磁盘容量。
  • RuntimeKeepFree:指定向易失性存储内写入数据时为其它应用保留的空间量。
  • RuntimeMaxFileSize:指定单一 journal 文件可占用的最大易失性存储容量。

查看指定时间段的日志

使用 --since--until 选项设定时间段,可以查询特定时间范围内的日志记录。时间值可以使用多种格式,包括相对时间(如 yesterdaytodaytomorrownow)。

查询特定时间点后的日志

bash 复制代码
[root@master ~]# sudo journalctl --since "2018-03-26 20:20:00"

获取昨天的日志数据

bash 复制代码
[root@master ~]# sudo journalctl --since yesterday

获取特定时间段内的日志

bash 复制代码
[root@master ~]# sudo journalctl --since 09:00 --until "1 hour ago"

过滤特定 unit 的日志

使用 -u 选项可以通过 unit 名称过滤器日志记录:

bash 复制代码
[root@master ~]# sudo journalctl -u docker.service --since today

实时查看日志更新

journalctl 支持 -f 选项,用于实时查看日志更新,类似于 tail -f 命令:

bash 复制代码
[root@master ~]# sudo journalctl -f

控制输出格式

重定向到标准输出

使用 --no-pager 选项可以将输出重定向到标准输出,方便后续文本处理:

bash 复制代码
[root@master ~]# sudo journalctl --no-pager

格式化输出结果

使用 -o 选项可以格式化输出结果,支持多种格式,包括 shortverbosejson 等:

bash 复制代码
[root@master ~]# sudo journalctl -u docker.service -n 1 --no-pager -o json

查看内核日志

使用 -k 选项可以查看内核日志:

bash 复制代码
[root@master ~]# sudo journalctl -k

优化 journald 配置

为了优化 journald 的性能和存储,可以创建配置文件 /etc/systemd/journald.conf.d/99-prophet.conf 并设置相关参数:

bash 复制代码
cat > /etc/systemd/journald.conf.d/99-prophet.conf <<EOF
[Journal]
Storage=persistent
Compress=yes
SyncIntervalSec=5m
RateLimitInterval=30s
RateLimitBurst=1000
SystemMaxUse=1G
SystemMaxFileSize=10M
MaxRetentionSec=2week
ForwardToSyslog=no
EOF

systemctl restart systemd-journald.service
systemctl enable systemd-journald.service

通过上述配置,可以确保日志数据的合理存储和清理,同时保持系统的高效运行。

相关推荐
EasyNVR几秒前
轻量级SDK,大能量:EasyRTC重塑嵌入式设备音视频体验
运维·服务器·音视频·webrtc·p2p·智能硬件
大囚长5 分钟前
AI驱动的自动化留给人类的时间不多了
运维·人工智能·自动化
老友@32 分钟前
Docker 部署 OnlyOffice 文档服务器
运维·服务器·后端·docker·容器·编辑器·onlyoffice
Koma_zhe1 小时前
【搭建SigNoz性能监控平台】在Ubuntu上快速搭建高效的SigNoz性能监控平台与远程使用技巧
linux·运维·ubuntu
xxxx1234451 小时前
Ubuntu中出现对control.tar.zst未知压缩
linux·运维·ubuntu
猎人everest1 小时前
Docker基础实践与应用举例
运维·docker·容器
淳杰1 小时前
ubuntu部署小笔记-采坑
linux·笔记·ubuntu
茂茂在长安1 小时前
Linux 命令大全完整版(12)
linux·运维·服务器·数据库·运维开发
技匠而已1 小时前
ubuntu安装docker & docker/DockerHub 国内镜像源/加速列表【持续更新】
linux·ubuntu·docker
WIFI_BT_DEV2 小时前
Linux设备驱动开发-中断
linux·c语言·arm开发·驱动开发·嵌入式硬件·硬件架构·gnu