插件窝 干货文章 如何通过Linux命令行工具进行日志聚合和统计?

如何通过Linux命令行工具进行日志聚合和统计?

log 日志 统计 var 569    来源:    2025-04-14

Linux命令行日志聚合与统计方法

日志分析是系统管理和故障排查的重要环节,下面介绍几种常用的Linux命令行日志聚合和统计方法。

基础文本处理工具

1. grep - 日志筛选

# 查找包含"error"的行
grep "error" /var/log/syslog

# 使用正则表达式匹配
grep -E "error|fail" /var/log/syslog

# 忽略大小写
grep -i "error" /var/log/syslog

# 显示匹配行前后内容
grep -A 3 -B 2 "error" /var/log/syslog

2. awk - 字段提取与统计

# 提取特定列(如第5列)
awk '{print $5}' /var/log/nginx/access.log

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

# 计算平均响应时间
awk '{sum+=$10} END {print "Avg:",sum/NR}' access.log

3. sed - 流编辑器

# 替换文本
sed 's/old/new/g' logfile

# 提取特定行范围
sed -n '10,20p' logfile

# 删除空白行
sed '/^$/d' logfile

高级日志分析工具

4. cut - 按列分割

# 提取第1和第3列(以空格分隔)
cut -d' ' -f1,3 /var/log/auth.log

5. sort | uniq -c - 计数统计

# 统计IP访问次数
cut -d' ' -f1 /var/log/nginx/access.log | sort | uniq -c | sort -nr

6. wc - 行数统计

# 统计日志行数
wc -l /var/log/syslog

# 统计匹配行数
grep "error" /var/log/syslog | wc -l

实时日志监控

7. tail - 实时查看日志

# 实时查看日志新增内容
tail -f /var/log/syslog

# 查看最后100行并实时更新
tail -100f /var/log/nginx/error.log

8. multitail - 多日志监控

# 同时监控多个日志文件
multitail /var/log/syslog /var/log/nginx/error.log

日志聚合工具

9. logrotate - 日志轮转

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

10. rsyslog - 集中式日志

# 查看rsyslog配置
cat /etc/rsyslog.conf

# 重启rsyslog服务
systemctl restart rsyslog

综合示例

统计Nginx访问日志

# 统计访问量最高的10个IP
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10

# 统计不同HTTP方法的请求数
awk '{print $6}' /var/log/nginx/access.log | cut -d'"' -f2 | sort | uniq -c

# 统计每小时请求量
awk '{print $4}' /var/log/nginx/access.log | cut -d: -f2 | sort | uniq -c

分析系统认证日志

# 统计失败登录尝试
grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr

# 统计成功登录的用户
grep "Accepted password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c

这些命令可以组合使用,通过管道(|)将多个工具串联起来,实现复杂的日志分析需求。对于更复杂的日志分析场景,可以考虑使用专门的日志聚合系统如ELK(Elasticsearch, Logstash, Kibana)或Graylog。