Linux日志处理命令多管道实战应用
全文目录
- 1 日志处理
- 1.1 实时日志分析
- 1.1.1 nginx日志配置
- 1.1.2 nginx日志示例
- 1.1.3 日志分析示例
- 1.2 多文件合并分析
- 1.3 时间范围日志提取
- 2 问题追查
- 2.1 进程级问题定位
- 2.2 网络连接排查
- 2.3 硬件故障追踪
- 3 数据统计
- 3.1 磁盘空间预警
- 3.2 进程资源消耗排名
- 3.3 HTTP状态码统计
- 4 高级组合技巧
- 4.1 TCP连接状态分析
- 4.2 日志时间戳转换
- 4.3 多条件文件清理
- 5 参考文献
写在前面
前面的博文详细梳理了《Linux日志处理命令完全解构 》和《从零开始掌握Linux数据流:管道与重定向完全指南》,从各个单一命令的原理介绍再到数据流如何在命令之间进行输入和输出,今天终于可以把前面的内容进行综合应用,来完成本篇关于日志处理实战应用的整理。
本文重点介绍几种实战中常用的利用管道来整合多命令达成预期处理效果的实战应用,希望能够给读者带来帮助。
1 日志处理
1.1 实时日志分析
1.1.1 nginx日志配置
http {log_format main '$remote_addr - $remote_user [$time_local] ''"$request" $status $body_bytes_sent ''"$http_referer" "$$http_user_agent" ''"$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;
}
1.1.2 nginx日志示例
192.168.1.100 - - [27/Apr/2025:15:30:45 +0800] "GET /index.html HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" "-"
192.168.1.100 - - [27/Apr/2025:15:30:45 +0800] "GET /index1.html HTTP/1.1" 500 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" "-"
192.168.1.100 - - [27/Apr/2025:15:30:45 +0800] "GET /index2.html HTTP/1.1" 500 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" "-"
192.168.1.100 - - [27/Apr/2025:15:30:45 +0800] "GET /index.html HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" "-"
192.168.1.100 - - [27/Apr/2025:15:30:45 +0800] "GET /index.html HTTP/1.1" 400 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" "-"
192.168.1.100 - - [27/Apr/2025:15:30:45 +0800] "GET /index2.html HTTP/1.1" 502 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" "-"
192.168.1.100 - - [27/Apr/2025:15:30:45 +0800] "GET /index1.html HTTP/1.1" 504 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" "-"
1.1.3 日志分析示例
- 动态跟踪Nginx日志,统计500错误的请求路径出现次数
tail -f access.log | grep ' 500 ' | awk '{print $7}' | sort | uniq -c
- 统计近1000条日志,输出请求路径访问次数最多的三个
tail -n 1000 access.log | awk '{print $7}' | sort -nr | uniq -c | head ‐3
- 统计某一时刻,504 错误访问的URL及远程id
grep "2025:15:30" access.log | awk -F' ' '$9==504 {print $1,$7}'| sort | uniq -c | sort -nr
1.2 多文件合并分析
- 合并多个日志文件,统计非本机IP的访问量TOP20
cat access.log* | grep -v '127.0.0.1' | awk '{print $1}' | sort | uniq -c | sort -nr | head -20
1.3 时间范围日志提取
- 提取MySQL服务在指定时间段内的死锁日志(显示上下文3行)
journalctl --since "2025-04-25 09:00" --until "2025-04-25 12:00" -u mysql | grep -C3 'deadlock'
2 问题追查
2.1 进程级问题定位
- 通过进程名定位PID,查询相关进程打开的文件描述符(处理过程:过滤进程→提取PID→查看文件句柄)
ps aux | grep nginx | awk '{print $2}' | xargs -I{} lsof -p {}
2.2 网络连接排查
- 筛选80端口监听状态,格式化输出结果(处理过程:过滤监听状态→匹配端口→表格排版)
netstat -tulnp | awk '$6=="LISTEN" && $4~":80$"' | column -t
- 统计网络连接情况
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' # TCP连接统计返回结果示例:
LAST_ACK 7
SYN_RECV 33
ESTABLISHED 159
FIN_WAIT1 51
FIN_WAIT2 90
TIME_WAIT 107解释说明:
SYN_RECV:表示正在等待处理的请求数
ESTABLISHED:表示正常数据传输状态
TIME_WAIT:表示处理完毕,等待超时结束的请求数
2.3 硬件故障追踪
- 分析内核日志中错误信息,按设备名统计异常次数(处理过程:过滤错误→提取设备标识→统计频次)
dmesg -T | grep -i error | awk -F'[: ]' '{print $1,$3}' | sort | uniq -c
3 数据统计
3.1 磁盘空间预警
- 检测磁盘使用超80%的分区,邮件通知管理员
df -h | awk '+$5 > 80 {print $6,$5}' | column -t | mail -s "Disk Alert" zhangsan@example.com
3.2 进程资源消耗排名
- 显示当前运行的进程信息,包括进程ID、父进程ID、命令名称、内存使用百分比和CPU使用百分比,并按内存使用百分比降序排列,显示前10条结果
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -n 10 | awk 'NR>1 {print $1,$4}'
3.3 HTTP状态码统计
- 统计日志中不同HTTP状态码出现次数(处理过程:提取状态码→排序计数→格式化输出)
awk '{print $9}' access.log | sort | uniq -c | awk '{printf "状态码%s: %d次\n",$2,$1}'
4 高级组合技巧
4.1 TCP连接状态分析
- 统计已建立连接的远程端口分布
ss -tunap | awk '{print $1,$5}' | grep 'ESTAB' | awk -F':' '{print $2}' | sort | uniq -c|sort -nr
4.2 日志时间戳转换
- 将日志中的时间转换为Unix时间戳便于分析
grep 'ERROR' app.log | awk '{print $1,$2}' | xargs -I{} date -d "{}" +%s
4.3 多条件文件清理
- 删除30天前且大于100MB的日志文件
find /logs -name "*.log" -mtime +30 -exec du -sh {} + | awk '$1 > 100M {print $2}' | xargs rm -vf
5 参考文献
文献1|文献2|文献3
写在最后
以上有限的例举了一些常用的组合式方法和命令来解决一些实际工作中的问题,这里仅是抛砖引玉,给读者一个认知上的拓展,并不能梳理的特别全面,根据遇到的实际情况,需要做灵活调整,已达成预期的效果。如果对你有帮助,欢迎点赞和收藏,如有任何问题,也欢迎评论指正,一起加油!