用命令行(CLI)做日志分析,核心思路是:抓取 → 过滤 → 聚合 → 统计 → 可视化(可选)。下面按“常用工具 + 实战示例”给你一个可落地的指南。
cat / less / tail / head查看日志的第一步。
# 实时看日志
tail -f app.log
# 看最后 100 行
tail -n 100 app.log
# 看最前面 50 行
head -n 50 app.log
grep:过滤关键信息日志分析的灵魂工具。
# 查错误
grep "ERROR" app.log
# 忽略大小写
grep -i "error" app.log
# 显示行号
grep -n "timeout" app.log
# 统计出现次数
grep -c "ERROR" app.log
# 多关键词
grep -E "ERROR|WARN" app.log
awk:字段提取 & 统计适合结构化日志(如空格 / 分隔符分隔)。
# 打印第1列和第4列
awk '{print $1, $4}' app.log
# 统计某列出现次数
awk '{print $1}' app.log | sort | uniq -c | sort -nr
# 统计 ERROR 出现时间分布
grep "ERROR" app.log | awk '{print $1}' | sort | uniq -c
sort + uniq:聚合统计经典组合。
# 统计 IP 访问次数
awk '{print $1}' access.log | sort | uniq -c | sort -nr
# Top 10
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head
sed:替换 / 提取适合格式化或清洗。
# 去掉时间戳只看内容
sed 's/^\[.*\] //' app.log
# 提取某个区间
sed -n '/2024-01-01 10:00/,/2024-01-01 11:00/p' app.log
192.168.1.1 - - [01/Jan/2024:10:00:01] "GET /api/user HTTP/1.1" 200 1234
# Top IP
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head
# 统计状态码
awk '{print $9}' access.log | sort | uniq -c
# 找出 500 错误
grep " 500 " access.log
2024-01-01 10:00 ERROR db timeout
# 按小时统计错误
grep "ERROR" app.log | awk '{print substr($1,1,13)}' | uniq -c
tail -f app.log | grep --line-buffered "ERROR"
jq(JSON 日志)cat app.json | jq '.level'
cut / columncut -d',' -f1,3 log.csv
column -t app.log
wcwc -l app.log
CLI 日志分析的精髓是管道组合:
cat app.log \
| grep "ERROR" \
| awk '{print $1}' \
| sort \
| uniq -c \
| sort -nr \
| head
grep 比 cat 快zcat 分析压缩日志split 切分大文件zcat app.log.gz | grep "ERROR"
如果你愿意,可以:
我可以直接帮你写一套可用的 CLI 分析命令。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。