CodeGym /课程 /Docker SELF /日志记录和查看系统日志: 命令 `journalctl`

日志记录和查看系统日志: 命令 `journalctl`

Docker SELF
第 3 级 , 课程 1
可用

1. 为什么需要处理日志?

日志(或者说log)就像你自己的“侦探”,它会记录系统中每一个重要操作。日志会记录内核、应用程序、服务和其他系统组件的操作。它是排查问题和监控系统运行的重要工具。

想象一下,如果你的服务器突然失联了。与其像福尔摩斯一样猜测到底出什么问题了,不如直接查看日志——一切清清楚楚。例如:“ssh服务挂了”、“磁盘满了”、“猫跑过键盘停掉了重要服务”。日志会告诉你一切。

处理系统日志的好处:

  1. 诊断问题。 如果出了问题,可以在日志中找到错误或警告。
  2. 跟踪服务运行。 比如,了解为什么PostgreSQL数据库停了,或者最后一次更新Web服务器是什么时候。
  3. 收集分析数据。 监控服务性能和指标。
  4. 提升安全性。 日志可以显示通过SSH的入侵尝试或者未经授权的访问。

2. 介绍 journalctl

journalctl 是一个强大的命令,用于查看和过滤 Linux 系统日志。它与 systemd-journald 一起工作,这是 systemd 管理的日志收集和存储系统。

使用 journalctl 的基本操作

首先,让我们看看如何使用这个工具。打开终端并输入:

journalctl

这个命令会显示 所有 系统日志,它们是按照时间顺序排列的。如果你期待看到什么简洁的东西,那要准备好:通常日志有好几屏。不用慌,我们稍后会学习如何过滤它们。

现在,要退出日志查看,按下 q (你应该已经注意到了 lessjournalctl 的相似之处,对吧?)。


按时间过滤日志

现在我们要神奇地缩小日志范围到更方便的区间。

查看最近 1 小时的日志

journalctl --since "1 hour ago"

查看某一天的日志

journalctl --since "2023-10-31"

指定时间范围

想看早上 8 点到 9 点的事件?没问题:

journalctl --since "2023-10-31 08:00:00" --until "2023-10-31 09:00:00"

按时间过滤很有用,比如当你知道问题在某个具体时间开始时。类比一下:你不会为了知道凶手是谁而读完整本书 —— 你只需翻到最后几页。


查看特定服务的日志

与其查看整个系统的日志,不如专注于一个服务。例如,想看看 nginx 网络服务器的运行状况:

journalctl -u nginx

如果只想看最近 1 小时的记录(谁不喜欢最新鲜的信息呢):

journalctl -u nginx --since "1 hour ago"

一些简短的示例:

  • -u ssh: SSH 服务的日志。
  • -u cron: CRON 任务的日志。
  • -u mysql: MySQL 数据库的日志。

实时查看日志

当你正在即时解决问题时,实时观察日志可能非常有用——就像看一场足球比赛那样。要实现这个,可以用命令:

journalctl -f

选项 -f 类似于 tail -f,它会随着新日志记录的产生实时显示出来。

例如,尝试运行这个命令,并同时重启某个服务:

sudo systemctl restart ssh

你会看到变化 —— 日志里会出现服务重启的记录。


在日志中查找错误

日志通常很长,手动查找感兴趣的信息就像大海捞针。所以我们可以使用关键字搜索。

简单使用:

journalctl | grep "ERROR"

这个示例会只显示包含 ERROR 的行。你可以把 ERROR 替换成任何你想要的关键词,比如 WARNINGfailedpanic


3. 针对 journalctl 的特殊选项

仅查看系统重启后的日志

想知道系统上次启动后发生了什么?好奇吗?直接使用:

journalctl -b

每次系统重启都会被记录为一个独立的“块”。如果你想查看倒数第二次启动后的日志(对的,有时候会非常有用):

journalctl -b -1

按用户或 PID 过滤日志

有时候需要追踪某个特定用户或者进程的操作。例如:

journalctl _UID=1000

1000 替换为用户 ID(可以用 id 命令查看 ID)。

如果要按 PID(进程标识符)过滤:

journalctl _PID=1234

4. 实践示例

  1. 寻找 SSH 服务的错误。

    想知道为什么 SSH 无法连接?使用如下命令:

    journalctl -u ssh | grep "ERROR"
    
  2. 分析 CRON 在过去 24 小时的日志。

    假设你在检查为什么你的每日脚本没有执行:

    journalctl -u cron --since "yesterday"
    
  3. 实时监控 Web 服务器。

    Web 服务器有压力?查看日志中的错误:

    journalctl -u nginx -f
    

自行实践练习

  1. 查找 SSH 服务在过去 24 小时内的错误日志。
  2. 使用 journalctl 命令,只显示 CRON 早上的日志。确保命令能正确处理时间范围。
  3. 设置 systemd 日志的实时监控,并启动几个系统服务以在日志中查看其状态。

日志记录不仅仅是关于错误的参考或问题诊断。它还是你的秘密代理,帮助你监控整个操作系统。一旦你掌握了 journalctl 命令,你将拥有一个强大的工具来分析、优化和确保 Linux 系统在任何情况下的稳定运行。

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION