Linux运维进阶技巧-日志排查分析
日志查看技巧
1.全量查看日志:cat
我们可以通过cat命令来全量查看日志,但是当日志量很大的情况下我们都不会这样做。所以我们一般都是在查看全量日志的同时配合grep、awk、sed这三个工具来使用,作用是过滤查看error日志或者关键信息的日志内容。
【示例】过滤日志文件中的ERROR日志
cat test.log |grep ERROR
# 也可以直接使用grep命令
grep ERROR test.log
2.配合less和more
所有的读取文本内容的命令都可以配合less和more来分量读取文本里面的内容。如下所示:
# 配合less使用
cat test.log |less
# 配合more使用
cat test.log |more
less命令:按↑ 和 ↓快捷键来一行一行翻取文本内容,q快捷键退出阅读状态。
more命令:按Enter快捷键来一页页翻取文本内容,q快捷键退出阅读状态。
3.tail命令
tail命令是我们最常用的日志查看命令工具,主要用于从文本末尾开始读取内容,因为日志文件最新的内容都在最后,所以tail常用于日志文件的读取作用。
tail命令不加参数默认是读取文件最后10行内容,如下所示:
【示例1】查看文件末尾内容
tail test.log
我们可以通过-n 行数或者-行数参数来选择查看文件末尾多少行内容,如下所示:
【示例2】查看文件末尾20行内容
tail -n 20 test.log
# 或者以下方式
tail -20 test.log
☆以下方式是我们最常用的方式,就是实时查看日志内容,当日志文件内容更新,也会一直持续更新内容,方便我们在开发排查问题中,实时查看日志跟进查找问题。如下所示:
【示例2】实时查看文件内容
tail -f test.log
4.head命令
head命令跟tail命令的作用相反,head命令的作用就是从开头查看文件内容。
head命令不加参数跟tail一样默认是读取文件10行内容,只不过是开头的10行内容,如下所示:
【示例1】查看文件开头内容
head test.log
同样的head命令可以通过-n 行数或者-行数参数来选择查看文件开头多少行内容,如下所示:
【示例2】查看文件开头20行内容
head -n 20 test.log
# 或者以下方式
head -20 test.log
温馨提示:因为日志文件通常最新内容都在末尾更新,
head命令是查看开头内容,所示就没有实时查看文件开头内容的选项,感觉也没有必要。
系统日志
一般Linux系统级别的日志都放在/var/log目录下,我们可以根据一些系统级别的日志解决一些问题。
系统常用日志:
| 日志文件 | 说明 |
|---|---|
| /var/log/messages | 记录系统启动、设备驱动、守护进程、系统服务等通用日志,是系统最重要的综合日志之一(CentOS/RHEL 常见)。 |
| /var/log/syslog | 与 /var/log/messages 类似,但在 Debian/Ubuntu 系中使用,记录系统级通用信息与错误。 |
| /var/log/dmesg | 记录系统启动时内核检测硬件的相关信息(由 dmesg 命令输出)。对硬件故障分析很有用。 |
| /var/log/boot.log | 系统启动过程中服务启动的详细信息。 |
| /var/log/auth.log | 同上,在 Debian/Ubuntu 系使用,记录认证和授权相关操作。 |
| /var/log/faillog | 记录失败登录尝试的信息,可用 faillog -a 查看。 |
| /var/log/lastlog | 记录每个用户最近一次登录信息,可用 lastlog 命令查看。 |
| /var/log/btmp | 记录登录失败的尝试,可用 lastb 命令查看。 |
| /var/log/wtmp | 记录所有用户登录、登出信息,可用 last 命令查看。 |
| /var/log/utmp | 记录当前已登录的用户信息,可通过 who 或 w 命令查看。 |
systemd管理服务日志
在我们使用systemd来对服务进行管理的时候我们可以通过systemctl status 服务名来获取服务的状态和一些日志,但是日志记录量有限,这个时候我们需要使journalctl来查看管理服务的相关日志。
journalctl是systemd的日志查看命令,用来读取由systemd-journald服务维护的二进制日志文件,它整合了系统启动日志、内核日志、服务日志、用户会话日志等。
systemd日志位置(默认):/var/log/journal
我们需要查看相关日志,如下所示:
# 查看所有管理服务的日志
journalctl -xe
# 查看指定服务的日志
journalctl -u 服务名
我们还可以其他方式查看,如下所示:
【示例1】实时跟踪日志
journalctl -f
【示例2】选取日志时间进行查看
journalctl --since "2025-10-13 09:00" --until "2025-10-13 11:00"
系统日志清理
我们可以通过journalctl --disk-usage来查看系统日志占用的空间,如下所示:
root@ihavetwocats:~# journalctl --disk-usage
Archived and active journals take up 2.0G in the file system.
上面可以看到系统日志占用了2.0G大小,我们可以通过以下方式进行清理。
【示例1】通过选择保留日志的时间
journalctl --vacuum-time=7d
可改为1month、2weeks、12h 等时间单位。
【示例2】通过保留日志文件的大小
journalctl --vacuum-size=1G
可改为500M、2G 等单位。
★日志查看神器:multitail
multitail是一个非常实用的Linux日志监控工具,可以在 同一个终端窗口中同时查看多个文件(通常是日志文件),并支持高亮、过滤、合并显示、动态刷新等功能。相比tail -f,它的功能更强大且更适合实时监控多个日志源。
作为Linux外部的命令工具,可能需要安装,安装方法如下:
Debian / Ubuntu
apt -y install multitail
RedHat / CentOS
yum -y install multitail
当我们需要同时查看多个日志文件的时候文件,我们后面只需要跟上多个日志文件名就行。
【示例】查看多个日志文件
multitail test1.log test2.log
查看结果会发现两个日志文件内容呈上下两块分开显示,如下图所示:

我们可以通过-s选项自定义窗口的布局,按照每行多少个窗口的形式。
【示例】设置窗口每行2个窗口展示
multitail -s 2 test1.log test2.log
查看结果因为只有两个日志文件窗口,所以窗口并排展示,如下图所示:

我们还可以通过-e选项过滤日志文件的内容来显示,相当于配合grep命令。
【示例】分开过滤两个日志文件的显示内容
multitail -s 2 -e 'start' test1.log -e 'running' test2.log
通过过滤我们一个文件只显示start相关内容,一个只显示running相关内容,如下图所示:

还有其他很多好用的用法,如下所示:
【示例1】动态刷新指定命令的输出
multitail -l "journalctl -f"
温馨提示:该选项监控的是命令输出,而不是文件。
【示例2】合并显示多个文件内容
multitail -I test1.log -I test2.log
multitail常用交互快捷键
| 快捷键 | 功能 |
|---|---|
| q | 退出 multitail |
| b | 暂停/恢复输出 |
| n | 切换到下一个窗口 |
| p | 切换到上一个窗口 |
| / | 搜索文本 |
| Ctrl + R | 刷新显示 |
| ↑ / ↓ | 滚动查看历史内容 |
| + / - | 调整窗口高度 |