如何在 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 小时前"
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 选项实时跟踪日志。
相关文章
有用资源
linux 参考教程 - 该教程包含有关 linux 的更多信息:https://www.cainiaomax.com/linux/

