侧边栏壁纸
  • 累计撰写 262 篇文章
  • 累计创建 139 个标签
  • 累计收到 16 条评论

目 录CONTENT

文章目录

CentOS7日志管理工具 journalctl

Sherlock
2020-11-04 / 0 评论 / 0 点赞 / 2132 阅读 / 0 字
温馨提示:
本文最后更新于2023-10-09,若内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

在Systemd出现之前,Linux系统及各应用的日志都是分别管理的,Systemd开始统一管理了所有Unit的启动日志,这样带来的好处就是可以只用一个 journalctl命令,查看所有内核和应用的日志。

目录位置在:/var/log/journal,可定期清理或者设置保留策略。

CentOS 系统中有两个日志服务,分别是传统的 rsyslog 和 systemd-journal

systemd-journald 是一个改进型日志管理服务,可以收集来自内核、系统早期启动阶段的日志、系统守护进程在启动和运行中的标准输出和错误信息,还有syslog 的日志。由于日志是经历过压缩和格式化的二进制数据,所以在查看和定位的时候很迅速。

另外,一些rsyslog无法收集的日志也会被journal记录到。

rsyslog作为传统的系统日志服务,把所有收集到的日志都记录到/var/log/目录下的各个日志文件中。

1.常见的日志文件如下

  • /var/log/messages 绝大多数的系统(报错)日志都记录到该文件

    messages 日志是核心系统日志文件。它包含了系统启动时的引导消息,以及系统运行时的其他状态消息。IO 错误、网络错误和其他系统错误都会记录到这个文件中。其他信息,比如某个人的身份切换为 root,也在这里列出。如果服务正在运行,比如 DHCP 服务器,您可以在 messages 文件中观察它的活动。通常,/var/log/messages是在做故障诊断时首先要查看的文件。

  • /var/log/secure 所有跟安全和认证授权(登录)、网络连接等日志都会记录到此文件

  • /var/log/maillog 邮件服务的日志

  • /var/log/cron crond计划任务的日志

  • /var/log/boot.log 系统启动的相关日志

  • /var/log/journal 所有Unit的启动日志

  • 文件 /var/run/utmp 现在登录的用户

  • 文件 /var/log/wtmp 所有的登录和注销

  • 文件 /var/log/lastlog 每个用户最后的登录信息

  • 文件 /var/log/btmp 记录错误的登录尝试

  • 文件 /var/log/auth.log 需要身份确认的操作

2.基础用法

2.1 查看所有日志(默认显示本次启动的所有日志)

journalctl

查看本次启动的所有日志也可以使用

journalctl -b

2.2 查看内核日志

journalctl -k

2.3 查看指定时间的日志

通过--since和--until选项,可以过滤任意时间限制,显示指定条件之前、之后或之间的日志。

journalctl --since="2020-09-21 10:21:00" --until="2020-09-21 10:22:00"

2.4 根据不同的主题进行过滤筛选

根据服务筛选

journalctl -u halo.service
journalctl -u halo

根据进程ID查询

如果进程使用了systemd托管日志,则可以通过以下命令查找进程对应的日志。

journalctl _PID=1

Systemd journal 有很多可以用来过滤的字段,可以通过man systemd.journal-fields查看所有可以用来过滤的字段。对于用来筛选的字段,可以使用-F参数来查看所有可以用来过滤的值,例如journalctl -F _PID

按优先级

操作系统提供了从0 (emerg) 到 7 (debug) 一共7个级别的日志,可以配合-p参数分别查看对应级别的日志。

journalctl -p 5 -u halo

7个级别的含义为:

0: emerg
1: alert
2: crit
3: err
4: warning
5: notice
6: info
7: debug

2.5 调整显示输出

默认情况,journal输出进入分页模式,用户可以在终端上调整显示的内容,如果不需要分页,需要加上--no-pager参数。

以Json格式输出

journalctl -p 5 --no-pager -o json

通过-o参数,可以设置为json格式输出,这对于其他接收json格式的日志分析工具非常友好

journalctl -p 5 --no-pager -o json-pretty

使用json-pretty则对于管理员查看日志非常易读。

支持的各种格式如下:

cat: 只显示信息字段本身。
export: 适合传输或备份的二进制格式。
json: 标准JSON,每行一个条目。
json-pretty: JSON格式,适合人类阅读习惯。
json-sse: JSON格式,经过打包以兼容server-sent事件。
short: 默认syslog类输出格式。
short-iso: 默认格式,强调显示ISO 8601挂钟时间戳。
short-monotonic: 默认格式,提供普通时间戳。
short-precise: 默认格式,提供微秒级精度。
verbose: 显示该条目的全部可用journal字段,包括通常被内部隐藏的字段。

2.6 活动日志跟踪

journalctl也支持类似tail的功能,如通过-n参数指定显示最近的多少行,默认为10行,通过-f参数持续监控日志输出。

3. 维护

3.1 查看日志占用的磁盘空间

journalctl --disk-usage

3.2 设置日志占用的空间

# 只保留500MB
journalctl --vacuum-size=500M

3.3 设置日志保存的时间

# 只保留近一月的日志
journalctl --vacuum-time=1month
# 只保留近一周的日志
journalctl --vacuum-time=1w

3.4 直接删除日志文件

rm -rf /var/log/journal/xxxxxxxxxxxxxxxxxxxxxxxxxxxxx

4.配置文件

上面的一些维护动作,也可以通过配置参数设置,配置文件位于/etc/systemd/journald.conf
不再赘述

5.常见问题

执行journalctl命令时报错:

Error was encountered while opening journal files: Input/output error

问题分析:日志文件损坏
解决方法:删除之前的日志,并重启journalctl服务

mv journal/xxxxxxxxxxxxxxxxxxxxxxxxxxxxx journal/xxxxxxxxxxxxxxxxxxxxxxxxxxxxx_bk

重启journalctl服务

systemctl restart systemd-journald
0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区