主要命令:cat、tac、more、less、tail、head、grep、awk、sed
大数据场景:YARN、Flink、Spark、Hadoop、keepalived 日志;排查报错、OOM、任务异常、数据倾斜。
日志常见目录参考:
- YARN 容器日志:
/var/log/hadoop-yarn/ - 系统日志:
/var/log/messages - 应用日志:
/opt/xxx/logs/*.log
1、cat 一次性全部输出日志
cat app.log
-
特点:一次性把文件全部打印屏幕;大日志文件严禁直接 cat,刷屏,占满终端。
-
✅适用:小文件,几十 KB 以内。
-
❌禁止:几个 GB 的日志直接 cat,终端卡死。
只输出最后20行
cat app.log | tail -20
2、tac 倒序输出(cat 反过来)
tac app.log
从日志最后一行往第一行打印。
场景:报错一般在日志末尾,想看最新日志,不想翻页;
小日志文件使用。
3、more 分页查看
more app.log
操作按键:
- 空格:下一页
- Enter:下一行
- q:退出 缺点:不能往回翻,只能往下翻。 适用:中等大小日志。
4、less【生产最推荐,神器】⭐
less app.log
常用快捷键(非常实用)
| 按键 | 作用 |
|---|---|
| 空格 | 向下翻页 |
| b | 向上翻页 |
| j / ↓ | 向下一行 |
| k / ↑ | 向上一行 |
| G | 跳到日志最后一行(看最新日志) |
| g | 跳到第一行 |
| /Exception | 向下搜索关键字 Exception,n 下一个匹配,N 上一个 |
| ?Error | 向上搜索 Error |
| q | 退出 |
✅真实场景:排查 Flink/Spark 任务本地日志,日志几个 GB,less 不会一次性加载全部文件,打开速度快。
进入 less 之后直接按大写
G跳到末尾,然后/OOM搜索 OOM 关键字。
# 直接打开并定位到最后
less +G app.log
5、tail 高频!看末尾日志,实时跟踪日志
① tail -n 查看末尾 N 行
tail -n 100 app.log
# 简写
tail -100 app.log
✅场景:程序刚报错,看日志最后 100 行,找报错堆栈。
② tail -f 实时跟踪日志(流式输出)
tail -f app.log
实时打印文件新增内容;窗口挂住,Ctrl+C 退出。
⚠️坑:日志文件被日志轮转 (logrotate) 重命名,
tail‑f会继续读旧文件,看不到新日志。
③ tail -F 【生产优先用大写 F】
tail -F app.log
-F= follow+retry。文件被轮转、删除,会自动跟踪新建同名日志文件。✅真实场景:观察正在运行的 Flink TaskManager、YARN NM 实时日志,日志会切割轮转,一定要用 tail -F。
示例:观察 yarn nodemanager 实时日志
tail -F /var/log/hadoop-yarn/yarn-nodemanager.log
6、head 查看日志头部
head -n 50 app.log
看日志前 50 行;一般用于看程序启动参数、版本信息。
7、grep 过滤关键字(排查报错核心)
# 查找包含"Exception"行
grep "Exception" app.log
# -i 忽略大小写
grep -i "error" app.log
# -n 输出行号
grep -n "OOM" app.log
# -A after:匹配行之后输出N行;报错堆栈要往后看几行!
grep -A20 "OutOfMemoryError" app.log
# -B before:匹配行之前输出N行
grep -B10 "OutOfMemoryError" app.log
# -C context:前后各输出N行
grep -C15 "OutOfMemoryError" app.log
# -v 反向过滤,排除某些日志
grep -v "INFO" app.log #过滤掉INFO,只看WARN ERROR
✅真实场景:排查 Reduce OOM,找异常堆栈
grep -A30 "java.lang.OutOfMemoryError" taskmanager.log
-A30:匹配到 OOM 那一行,额外打印后面 30 行,完整看到异常栈。
grep 多文件批量查找
# 当前目录下所有.log文件搜索关键字
grep -i "OOM" *.log
8、组合使用,生产真实命令示例
示例 1:实时跟踪日志,同时过滤错误(tail+grep)
tail -F app.log | grep -i error
实时输出,只打印 error 日志。
示例 2:大日志,把报错部分保存出来,方便分析
grep -A50 "Exception" huge.log > error.log
把异常相关行输出到 error.log,下载分析,不用打开几个 G 大文件。
示例 3:查看 YARN 容器日志,只看 ERROR、忽略 INFO
cat container.log | grep -v INFO
9、awk 统计日志、提取字段
场景:日志有固定格式,统计错误数、提取 IP、时间。
#统计error出现多少次
grep -i "error" app.log | awk '{print $0}' | wc -l
10、sed 根据行号截取日志
大日志文件,已知报错在 12000‑13000 行,截取这一段
sed -n '12000,13000p' app.log > part.log
✅场景:less 查到报错行号,sed 截取一小段,不用处理整个 GB 级日志。
真实排错场景速查表
| 场景 | 推荐命令 | 说明 | |
|---|---|---|---|
| GB 级别大日志文件,查找 OOM 异常 | less +G xxx.log 然后 /OOM |
不加载全量文件,速度快 | |
| 实时观察正在运行服务日志(日志会轮转切割) | tail -F xxx.log |
不用 tail‑f,防止日志切割看不到新日志 | |
| 找到 OOM 并且需要完整异常堆栈 | grep -A30 "OutOfMemoryError" xxx.log |
-A 带出后面堆栈信息 | |
| 只想看报错,过滤掉大量 INFO 日志 | grep -v "INFO" xxx.log |
过滤冗余正常日志 | |
| 已知报错行号,截取一小段日志 | sed -n '10000,10200p' xxx.log > temp.log |
导出片段,方便分析 | |
| 小日志快速看最新内容 | `tac xxx.log | head -50` | 倒序输出最新 50 行 |
精简版
查看日志常用:
- cat 适合小文件;大文件禁止 cat。
- less 是大日志首选,可以上下翻页、搜索关键字,不会加载全部文件。
- tail‑n 看末尾行;tail‑f 实时跟踪,tail‑F 支持日志轮转,生产优先用大写 F。
- grep 用来过滤关键字,
-A/-B/-C可以打印匹配行前后日志,排查异常堆栈非常有用。- sed 可以按行截取大日志片段,避免操作整个超大日志文件。
小坑提醒
tail -f:日志文件被 logrotate 切割重命名后,依然读取旧句柄,看不到新日志;生产一律用 tail -F。- 几个 GB 日志不要 cat、不要直接 vi 打开,vi 会加载全部文件,机器卡顿。优先 less /sed/grep。
- grep 找异常一定要带上
-A,异常堆栈都在匹配行的后面。