如何在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"
要搜索包含 “错误 “字符串的日志
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 hour ago"
--o–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个新条目,然后退出
禁用Pager以获得直接输出
默认情况下,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选项实时跟踪日志。