1. 为什么需要处理日志?
日志(或者说log)就像你自己的“侦探”,它会记录系统中每一个重要操作。日志会记录内核、应用程序、服务和其他系统组件的操作。它是排查问题和监控系统运行的重要工具。
想象一下,如果你的服务器突然失联了。与其像福尔摩斯一样猜测到底出什么问题了,不如直接查看日志——一切清清楚楚。例如:“ssh服务挂了”、“磁盘满了”、“猫跑过键盘停掉了重要服务”。日志会告诉你一切。
处理系统日志的好处:
- 诊断问题。 如果出了问题,可以在日志中找到错误或警告。
- 跟踪服务运行。 比如,了解为什么PostgreSQL数据库停了,或者最后一次更新Web服务器是什么时候。
- 收集分析数据。 监控服务性能和指标。
- 提升安全性。 日志可以显示通过SSH的入侵尝试或者未经授权的访问。
2. 介绍 journalctl
journalctl 是一个强大的命令,用于查看和过滤 Linux 系统日志。它与 systemd-journald 一起工作,这是 systemd 管理的日志收集和存储系统。
使用 journalctl 的基本操作
首先,让我们看看如何使用这个工具。打开终端并输入:
journalctl
这个命令会显示 所有 系统日志,它们是按照时间顺序排列的。如果你期待看到什么简洁的东西,那要准备好:通常日志有好几屏。不用慌,我们稍后会学习如何过滤它们。
现在,要退出日志查看,按下 q (你应该已经注意到了 less 和 journalctl 的相似之处,对吧?)。
按时间过滤日志
现在我们要神奇地缩小日志范围到更方便的区间。
查看最近 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 替换成任何你想要的关键词,比如 WARNING,failed 或 panic。
3. 针对 journalctl 的特殊选项
仅查看系统重启后的日志
想知道系统上次启动后发生了什么?好奇吗?直接使用:
journalctl -b
每次系统重启都会被记录为一个独立的“块”。如果你想查看倒数第二次启动后的日志(对的,有时候会非常有用):
journalctl -b -1
按用户或 PID 过滤日志
有时候需要追踪某个特定用户或者进程的操作。例如:
journalctl _UID=1000
将 1000 替换为用户 ID(可以用 id 命令查看 ID)。
如果要按 PID(进程标识符)过滤:
journalctl _PID=1234
4. 实践示例
寻找 SSH 服务的错误。
想知道为什么 SSH 无法连接?使用如下命令:
journalctl -u ssh | grep "ERROR"分析 CRON 在过去 24 小时的日志。
假设你在检查为什么你的每日脚本没有执行:
journalctl -u cron --since "yesterday"实时监控 Web 服务器。
Web 服务器有压力?查看日志中的错误:
journalctl -u nginx -f
自行实践练习
- 查找 SSH 服务在过去 24 小时内的错误日志。
- 使用
journalctl命令,只显示 CRON 早上的日志。确保命令能正确处理时间范围。 - 设置
systemd日志的实时监控,并启动几个系统服务以在日志中查看其状态。
日志记录不仅仅是关于错误的参考或问题诊断。它还是你的秘密代理,帮助你监控整个操作系统。一旦你掌握了 journalctl 命令,你将拥有一个强大的工具来分析、优化和确保 Linux 系统在任何情况下的稳定运行。
GO TO FULL VERSION