大日志文件 tail 筛选最近 5 分钟关键词
状态:已验证可用(666)
日期:2026-05-19
项目:neirong_scf_appmainrecom
场景:服务器log4j.log约 5.9G 且持续增长,需查最近 5 分钟内的 ERROR / 业务关键词
背景
- 日志路径:服务器当前目录
./log4j.log(线上常见路径/opt/service/neirong_scf_appmainrecom/logs/log4j.log) - 导出目录:
/home/work/ - 日志格式(log4j):
[05-19 14:32:15 406 INFO] ...(月-日 时:分:秒) - 禁止对全文件
grep:5.9G 极慢,且文件仍在写入
核心命令(一行,推荐)
在 log4j.log 所在目录执行,修改 KW 为要搜的关键词:
KW='crossCity| ERROR |Exception|DataOverFlow|服务调用超时'; tail -n 2000000 ./log4j.log | grep -E "$KW" | grep -E "$(for i in $(seq 0 5); do date -d "$i minutes ago" +"\\[%m-%d %H:%M"; done | paste -sd'|')" | tee /home/work/last5min_kw.log && wc -l /home/work/last5min_kw.log
要点:
| 参数 | 说明 |
|---|---|
tail -n 2000000 |
先取尾部约 200 万行;5 分钟窗口不够时改为 5000000 |
seq 0 5 |
覆盖当前分钟 + 往前 5 分钟,避免边界漏行 |
grep -E "$KW" |
先筛关键词,再按时间前缀过滤 |
tee |
结果落盘到 /home/work/,终端可见行数 |
实时抓最近 5 分钟(tail -f + 超时)
timeout 300 tail -f ./log4j.log | grep --line-buffered -E 'crossCity| ERROR |Exception' | tee /home/work/last5min_live.log
timeout 300:跑满 5 分钟自动停grep --line-buffered:实时输出,不攒缓冲
统计最近 5 分钟各关键词次数
tail -n 2000000 ./log4j.log | grep -E "$(for i in $(seq 0 5); do date -d "$i minutes ago" +"\\[%m-%d %H:%M"; done | paste -sd'|')" | grep -oE 'crossCity|DataOverFlowException|ConcurrentModificationException|服务调用超时|bgv7RecallNewRuleProcess|crossCityGroup=exp1' | sort | uniq -c | sort -rn | tee /home/work/last5min_kw_count.txt
确认 tail 行数是否覆盖 5 分钟
若首尾时间差 < 5 分钟 → 加大 tail -n 行数。
常用关键词(本项目的排查场景)
| 目的 | 关键词 |
|---|---|
| 跨城上线 | crossCity、crossCityGroup=exp1、crossCity extract |
| 错误对比 | ERROR、Exception |
| 条数/超时 | DataOverFlowException、服务调用超时、getNewAppHomePageFeed |
| 首页条数变低 | insertNum、shortfall、blockWaitTaskFinish |
灰度 vs 未灰度对比(带 hostname)
grep -E " ERROR |Exception" ./log4j.log | grep -E "\[05-19 (19:[3-5]|20:[0-3])" > /home/work/err_$(hostname -s)_after_1930.log && wc -l /home/work/err_$(hostname -s)_after_1930.log
大文件版(先 tail 再筛):
tail -n 500000 ./log4j.log | grep -E " ERROR |Exception" | grep -E "\[05-19 (19:[3-5]|20:[0-3])" > /home/work/err_after_1930.log && wc -l /home/work/err_after_1930.log
踩坑
- 不要
grep ./log4j.log扫全文件 — 5.9G + 持续写入,IO 和耗时都不可接受 tail -n行数不够 — 日志 QPS 高时 5 分钟可能远超 200 万行,需先tail -n 1vshead -n 1校验时间跨度- 日期要改 —
05-19换成当天;动态时间用date -d "$i minutes ago"那段即可 - 跨城 INFO 不等于 ERROR —
crossCityGroup=off只说明走了实验逻辑但未命中 exp1
归档建议
整理时可移至:01-职业/项目/技术方案/ 或新建 01-职业/项目/neirong_scf_appmainrecom/ 下的运维排查目录。