插件窝 干货文章 如何通过Linux命令行工具进行日志过滤和分类?

如何通过Linux命令行工具进行日志过滤和分类?

log 日志 bash error 680    来源:    2025-04-14

Linux命令行日志过滤与分类指南

作为IT工程师,掌握高效的日志处理技能至关重要。以下是一些强大的Linux命令行工具和技术,可用于日志过滤和分类:

基础过滤工具

1. grep - 基础文本搜索

# 搜索包含"error"的行
grep "error" /var/log/syslog

# 不区分大小写搜索
grep -i "warning" /var/log/messages

# 显示匹配行及其后5行
grep -A 5 "critical" application.log

# 反向匹配(不包含指定内容)
grep -v "DEBUG" app.log

2. tail/head - 查看日志首尾

# 实时查看最新日志(常用于监控)
tail -f /var/log/nginx/access.log

# 查看最后100行
tail -n 100 app.log

# 查看前50行
head -n 50 system.log

高级过滤工具

3. awk - 强大的文本处理

# 提取日志的特定列(如第5列)
awk '{print $5}' access.log

# 按条件过滤(如状态码为500的请求)
awk '$9 == 500 {print $0}' access.log

# 统计不同状态码出现次数
awk '{print $9}' access.log | sort | uniq -c | sort -nr

4. sed - 流编辑器

# 替换文本(如将error替换为ERROR)
sed 's/error/ERROR/g' app.log

# 删除包含特定字符串的行
sed '/DEBUG/d' app.log

# 提取特定行范围(如10-20行)
sed -n '10,20p' system.log

日志分类与分析

5. sort/uniq - 排序与去重

# 统计IP访问频率
awk '{print $1}' access.log | sort | uniq -c | sort -nr

# 统计错误类型分布
grep "ERROR" app.log | awk '{print $4}' | sort | uniq -c

6. cut - 按列提取

# 提取第1列(IP地址)和第7列(请求URL)
cut -d' ' -f1,7 access.log

# 使用冒号分隔符提取用户名
cut -d':' -f1 /etc/passwd

组合工具使用

7. 管道组合

# 查找过去1小时内包含"error"的日志,按来源统计
grep "$(date -d '1 hour ago' '+%b %_d %H')" syslog | grep "error" | awk '{print $5}' | sort | uniq -c

# 分析Nginx访问日志中最频繁的URL
awk '{print $7}' access.log | sort | uniq -c | sort -nr | head -20

8. 使用正则表达式

# 匹配IP地址
grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' logfile

# 匹配时间戳格式
grep -E '\[[0-9]{2}/[A-Za-z]{3}/[0-9]{4}:[0-9]{2}:[0-9]{2}:[0-9]{2}' access.log

高级工具

9. jq - 处理JSON日志

# 提取JSON日志中的特定字段
cat app.json.log | jq '.timestamp, .level, .message'

# 过滤特定级别的日志
jq 'select(.level == "ERROR")' app.json.log

10. logrotate - 日志轮转

虽然不是过滤工具,但对于日志管理很重要:

# 手动执行日志轮转
logrotate -f /etc/logrotate.conf

实用技巧

  1. 使用别名简化常用命令
alias errgrep='grep -i --color=auto "error\|fail\|critical"'
  1. 保存过滤结果
grep "ERROR" app.log > errors.txt
  1. 多文件搜索
grep "timeout" /var/log/*.log
  1. 使用zgrep处理压缩日志
zgrep "404" /var/log/nginx/access.log.*.gz

通过熟练使用这些工具和技巧,您可以高效地过滤、分类和分析Linux系统中的日志数据,快速定位问题并获取有价值的系统信息。