日志高效排查

日志几百兆怎么看?运维老鸟常用的高效排查套路

在日常运维和开发工作中,日志就是系统的“黑匣子”。无论是排查故障、监控运行状态,还是追踪安全事件,日志往往能给我们提供最关键的线索。

然而,很多新人常常“看得见,却看不懂”,要么面对动辄上百兆的日志文件束手无策,要么在调试问题时找不到重点信息。今天,我们就来系统梳理一下 Linux 日志查看的常用方法与实战技巧,帮你从入门到进阶,玩转日志排查!

图片

Linux 日志都藏在哪里?

日志文件大多集中在 /var/log/ 目录下,不同服务有对应的日志:

系统级日志

/var/log/messages:系统核心日志,涵盖内核消息、进程运行情况等。

/var/log/syslog:在 Ubuntu/Debian 系统中取代 messages 的角色。

安全与认证日志

/var/log/auth.log(Debian/Ubuntu)

/var/log/secure(CentOS/RHEL)
记录登录、sudo 使用、SSH 认证等安全事件。

服务相关日志

/var/log/nginx/:Nginx 的访问日志 (access.log) 和错误日志 (error.log)

/var/log/apache2/:Apache日志

/var/log/mysql/:MySQL 启动、查询、错误日志

定时任务日志

/var/log/cron:所有定时任务的执行情况。

👉 小技巧:当你不知道某个服务的日志在哪,可以直接去 /var/log/ 下按服务名搜索。

日志查看的常用命令

1. cat 直接输出日志

适合小文件、快速浏览。

1
2
3
4
5
# 查看系统日志
cat /var/log/messages

# 只看最后 10 行
cat /var/log/messages | tail -n 10

2. tail 实时追踪日志(最常用)

1
2
3
4
5
6
7
8
# 实时输出新增日志
tail -f /var/log/nginx/access.log

# 显示最后 20 行并持续跟踪
tail -n 20 -f /var/log/mysql/error.log

# 同时跟踪多个文件
tail -f /var/log/nginx/access.log /var/log/nginx/error.log

3. head 查看日志开头部分

1
2
3
4
5
# 默认 10 行
head /var/log/auth.log

# 查看前 50 行
head -n 50 /var/log/boot.log

4. more/less 分页查看大日志

当日志文件几百 MB 时,分页浏览才不会“卡屏”。

1
2
3
4
5
# 按空格翻页
more /var/log/messages

# 更强大的 less,支持上下键和搜索
less /var/log/nginx/access.log

日志分析进阶:筛选与提取

1. grep 关键词搜索

1
2
3
4
5
6
7
8
9
10
11
# 查找 SSH 登录失败记录
grep "Failed password" /var/log/auth.log

# 查找 Nginx 500 错误(忽略大小写)
grep -i "500" /var/log/nginx/access.log

# 显示匹配行上下文
grep -C 5 "error" /var/log/mysql/error.log

# 统计关键词出现次数
grep -c "timeout" /var/log/nginx/error.log

2. awk 按列提取

1
2
3
4
5
# 提取 Nginx 日志中的 IP 和路径
awk '{print $1, $7}' /var/log/nginx/access.log

# 统计访问量前 10 的 IP
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n 10

3. sed 按条件取日志片段

1
2
3
4
5
# 查看第 100-200 行
sed -n '100,200p' /var/log/messages

# 删除 debug 相关行
sed '/debug/d' /var/log/app.log

4. 按时间筛选

1
2
3
4
5
# 查找 2023-10-01 08:00 ~ 09:00 的访问记录
grep "2023/10/01 08:" /var/log/nginx/access.log

# 更精准的时间过滤(按字段对比)
awk '$4 >= "[01/Oct/2023:08:00:00" && $4 <= "[01/Oct/2023:09:00:00"' /var/log/nginx/access.log

日志轮转与归档

Linux使用 logrotate 定期压缩和归档日志:

1
messages-20231001.gz
1
secure.1

查看归档日志:

1
2
3
4
5
6
# 直接查看压缩文件
zcat /var/log/messages-20231001.gz | grep "error"

# 解压后分析
gunzip /var/log/messages-20231001.gz
cat messages-20231001

实战案例

场景 1:排查 SSH 登录失败

1
grep "Failed" /var/log/auth.log | tail -n 20

快速定位可疑 IP,防止暴力破解。

场景 2:分析 Nginx 访问突增

1
tail -n 10000 /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -n 5

一眼看出“流量大户”,帮助甄别是否遭遇爬虫或攻击。

场景 3:跟踪服务启动报错

1
journalctl -b | grep -i "failed"

systemd系统上,journalctl 是必备神器,比传统日志更全面。

总结

日志排查的核心思路可以概括为:

找到 → 过滤 → 提取 → 分析

找到:熟悉 /var/log/ 目录和服务日志位置

过滤:用 grepawksed 精准提取

提取:结合字段,按 IP、时间、状态码等统计

分析:形成自己的“故障排查手册”

掌握这些方法,能让你在面对故障时不再“瞎子摸象”,而是有章可循、快速定位问题。

日志是系统留给我们的“线索”,学会读懂它,你就能更快找到真相!

微信公众号二维码

扫码关注公众号

关注我的博客

didiplus.kwpmp.cn

https://mp.weixin.qq.com/s/eak72Ti_vaUFVcH5POaqBQ