核心思路:少 cat、多用过滤 + 分页 + 实时跟踪;优先精准定位,拒绝全量翻日志,下面按「常用命令、高级技巧、场景选型、工具推荐、避坑」整理,都是线上运维高频用法,适配 Linux 服务器日志(Nginx、Java 应用、系统日志等)。
前置小约定:
xxx.log代表日志文件;xxx.log.*为滚动切割日志。
一、基础命令(必背,线上最常用)
1. 实时看最新日志(排查故障首选)
# 持续输出,默认末尾10行,实时刷新
tail -f xxx.log
# 直接从最后200行开始跟踪,避免日志太长刷屏
tail -n 200 -f xxx.log
# 跟踪日志切割(logrotate 切割后,tail -f 会断!用-F)
tail -n 200 -F xxx.log
✅
-f:文件句柄跟踪,日志 mv 切割后失效;-F同时监听文件名,切割自动重新打开,生产优先 tail -F
2. 分页浏览大日志(不会一次性刷满屏幕)
less xxx.log
less 快捷键(非常重要)
空格:下一页;b:上一页/关键词:向下搜索;?关键词:向上搜索n下一个匹配;N上一个匹配G跳到末尾;1G跳到第一行q退出
对比:
more只能向下翻,运维一律推荐 less
3. 关键词过滤 grep(最核心,缩小范围)
# 查找包含 ERROR 的行
grep "ERROR" xxx.log
# 忽略大小写(error / ERROR / Error 全部匹配)
grep -i "error" xxx.log
# 显示匹配行 + 前后N行,排查上下文(排查异常栈必用)
grep -C 10 "NullPointerException" xxx.log
# -A after 后面10行;-B before 前面10行
grep -A 15 "Exception" xxx.log
# 多文件批量检索(检索当前目录所有日志)
grep "timeout" *.log
# 排除某些行(过滤掉健康日志,只留异常)
grep "ERROR" xxx.log | grep -v "healthCheck"
注意:grep 默认是基础正则;
grep -E开启扩展正则。
二、组合管道:线上高频组合命令
1. 实时跟踪 + 只看报错(最常用!)
tail -F xxx.log | grep -i "error\|exception\|warn"
2. 按时间筛选日志(最实用,定位某个时间段故障)
假设日志格式:2026-09-12 10:30:22 xxx
# 截取 10:00 ~ 10:30 的日志,用grep匹配时间字符串
grep "2026-09-12 10:0[0-9]" xxx.log
如果日志量大,推荐先用 less 再 /时间 搜索,减少内存占用。
3. 统计报错次数(快速评估问题量级)
# 统计ERROR出现多少条
grep -c "ERROR" xxx.log
# 按错误类型去重统计
grep "ERROR" xxx.log | awk '{print $5}' | sort | uniq -c
4. awk 提取字段(结构化日志,提取 IP、耗时、接口)
示例日志:2026-09-12 10:00:00 GET /api/user 127.0.0.1 200 235ms
# 打印第4列(接口路径)和最后一列耗时
awk '{print $4,$NF}' xxx.log
# 筛选耗时>500ms的请求
awk '$NF>500 {print $0}' xxx.log

三、不同场景怎么选命令
压缩日志专用:
zgrep "ERROR" xxx.log.20260912.gz zless xxx.log.gz
四、进阶工具(大规模运维:单机多服务 / 集群)
1. lnav(强烈推荐,单机神器)
自带日志时间解析、高亮、多文件合并查看,自动识别 Nginx/java 日志,比 less 友好很多。
# 直接打开多个日志,自动按时间排序
lnav xxx.log xxx2.log
特点:彩色高亮、时间跳转、支持 sql 查询日志,小集群单服务器运维首选。
2. 集群场景(多机器日志)
轻量:rsyslog + logrotate 集中收日志
主流方案:ELK (Elasticsearch+Logstash+Kibana) / Loki+Grafana / Graylog
集群不要挨个 ssh 登录 tail,集中日志平台检索、按 traceId 检索,效率提升巨大。
3. 其他小工具
multitail:同时跟踪多个日志文件,分屏显示
multitail app.log nginx.log
五、运维日志查看最佳实践 & 坑
❌ 禁止 cat 几十 GB 大日志:cat 一次性加载全部内容,占满内存,直接 OOM。大日志一律 less /tail。
✅ 日志规范:必须打印时间戳、traceId,线上排查优先按 traceId 全链路检索,比搜 ERROR 更精准。
✅ 日志切割:使用 logrotate,防止单个日志文件无限膨胀。
❌ 不要直接 vi/vim 打开几十 GB 日志:vim 会加载文件到内存,容易卡死会话。
✅ 检索优先:先过滤关键词,再看上下文,不要从头逐行读日志。
权限:生产日志一般属主 root,需要 sudo。
六、快速排查模板(直接复制使用)
# 实时跟踪应用日志,只保留异常,高亮
tail -F app.log | grep -E --color "ERROR|Exception|WARN|timeout"
# 检索某个traceId全链路日志
grep "traceId=123456" app.log -C5
# 统计各类错误数量
grep "ERROR" app.log | awk '{print $3}' | sort | uniq -c | sort -nr本文原创作者:易君召,详见:https://www.yijunzhao.cn/authors/yijunzhao,转载请注明出处。
原文链接
欢迎访问 小易撩挨踢