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

linuxopen sourceoperating system

日志是任何 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 小时前"

journalctl --since "2022-11-01 00:00:00"
journalctl --after "1 小时前"

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

journalctl --until "2022-11-01 00:00:00"
journalctl --before "1 小时前"

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

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 选项实时跟踪日志。


相关文章


有用资源