如何在Linux中使用journalctl检查日志


日志是任何Linux系统的关键组成部分,因为它提供了系统活动的记录,包括系统事件、用户操作和系统进程。日志检查或日志监控是定期检查日志文件以识别任何异常或可疑活动(例如登录失败尝试、系统崩溃或安全漏洞)的过程。日志检查对于维护Linux系统的安全性和稳定性非常重要,因为它允许管理员快速识别和解决问题,并检测和响应潜在的安全威胁。

基本的journalctl命令

journalctl是一个命令行实用程序,用于查看和管理使用systemd初始化系统的Linux系统上的日志。journalctl命令可用于查看和过滤系统日志,包括所有系统服务、内核和特定服务或用户的日志。该命令可用于显示整个日志、查看特定启动的日志或按日期、时间、用户、进程等过滤日志。

以下是一些使用journalctl在Linux系统上查看特定类型日志的示例:

查看nginx服务的所有日志:

journalctl -u nginx

查看所有登录失败尝试的日志:

journalctl -p authpriv.warning

查看上次重启后的所有日志:

journalctl -b

查看过去一周的所有日志:

journalctl --since "1 week ago"

查看特定时间范围内的日志:

journalctl --since "2022-10-01 00:00:00" --until "2022-10-15 23:59:59"

搜索包含字符串“Error”的日志:

journalctl -S Error

按日期或时间过滤

journalctl允许您使用--since和--until选项按日期或时间过滤日志。

--since= 或 --after=:显示自特定时间以来的日志。时间可以使用多种格式指定,例如“YYYY-MM-DD HH:MM:SS”、“YYYY-MM-DDTHH:MM:SS”甚至自然语言格式,例如“1 hour ago”。

journalctl --since "2022-11-01 00:00:00"
journalctl --after "1 hour ago"

--until= 或 --before=:显示直到特定时间的日志。与上述相同,时间格式可以有多种。

journalctl --until "2022-11-01 00:00:00"
journalctl --before "1 hour ago"

您可以将这两个选项一起使用以过滤特定日期/时间范围内的日志。

journalctl --since "2022-11-01 00:00:00" --until "2022-11-30 23:59:59"

需要注意的是,使用--since和--until选项时,指定的时间是包含在内的。

用户和进程

journalctl也允许您按用户和进程过滤日志。

要按用户过滤日志,您可以使用_UID字段并提供用户ID作为值。

journalctl _UID=1000

要按进程过滤日志,您可以使用_PID字段并提供进程ID作为值。

journalctl _PID=1234

要按命令过滤日志,您可以使用_COMM字段并提供命令名称作为值。

journalctl _COMM=mycommand

要按可执行文件过滤日志,您可以使用_EXE字段并提供可执行文件路径作为值。

journalctl _EXE=/usr/bin/mycommand

您还可以链接多个字段和值以更具体地过滤日志。

journalctl _UID=1000 _COMM=mycommand
journalctl _UID=1000 _PID=1234 _COMM=mycommand

需要注意的是,按用户或进程过滤时,journalctl返回指定用户或进程是日志消息发起者的日志。

您还可以使用_SYSTEMD_UNIT按systemd单元过滤日志,它将显示与该单元相关的日志。

journalctl _SYSTEMD_UNIT=my.service

跟踪和跟随日志

journalctl允许您使用-f或--follow选项实时跟踪和跟随日志。当您使用此选项时,journalctl将在日志添加到日志时显示新的日志条目。

journalctl -f

此命令将在日志出现时流式传输新的日志,并允许您随时关注日志,而无需手动刷新日志。

您还可以将其他选项与-f一起使用来过滤您想要实时跟踪的日志。例如,要实时跟踪特定服务的日志,您可以使用以下命令:

journalctl -f -u myservice

这将流式传输myservice的新日志。

您可以使用ctrl + c退出跟随模式并返回到正常的shell提示符。

此外,您可以将-n选项与-f一起使用以输出特定数量的新条目,然后退出。

journalctl -f -n 10

此命令将显示10个新条目,然后退出。

禁用分页器以获取直接输出

默认情况下,journalctl使用less或more之类的分页程序来显示日志条目。这允许您一次一页地滚动浏览日志。但是,如果您希望完整地查看日志,您可以禁用分页器并使用--no-pager选项获取命令的直接输出。

journalctl --no-pager

此命令将显示屏幕上的所有日志。

您还可以将此选项与其他选项一起使用,例如跟踪日志或按日期或时间过滤。

journalctl --no-pager -f
journalctl --no-pager --since "1 hour ago"

当您将--no-pager选项与其他选项一起使用时,它将显示日志在屏幕上出现后立即显示,并允许轻松地将输出输出到文件或使用管道输出到另一个命令,如下所示:

journalctl --no-pager > /path/to/logfile.txt
journalctl --no-pager | grep -i error

输出

journalctl允许您使用--output选项指定其输出的格式。默认情况下,journalctl以易于阅读和理解的易于阅读的格式输出日志。

您可以从中选择几种格式:

json - 以JSON格式输出日志。此格式是机器可读的,并且可以很容易地被脚本解析。

journalctl --output json

verbose - 以更详细的格式输出日志,包括其他字段和元数据。

journalctl --output verbose

short - 以较短的格式输出日志,只包含最重要的字段。

journalctl --output short

cat - 以与它们存储在日志中的相同格式输出日志,这是二进制的,并非旨在供人阅读。

journalctl --output cat

需要注意的是,指定输出格式时,journalctl将只输出与所选格式相关的字段。

您可以将此选项与其他选项一起使用,以使输出符合您的需求。

journalctl --output json --since "1 hour ago" --until "now"

当您想要使用脚本或外部工具分析日志时,或者当您想要以更容易被另一个应用程序或服务使用的格式输出日志时,这非常有用。

结论

journalctl是用于查看和分析使用systemd初始化系统的Linux系统上的日志的强大工具。使用journalctl,您可以查看所有系统服务和内核的日志,以及特定服务或用户的日志。

您可以按不同的条件过滤日志,例如日期和时间、用户、进程等等。您还可以以不同的格式输出日志,例如json或verbose,还可以禁用分页器以获取命令的直接输出,或使用-f选项实时跟踪日志。

更新于:2023年1月24日

2K+ 次浏览

启动您的职业生涯

通过完成课程获得认证

开始
广告