|
|
服务器错误日志筛选、统计与故障复盘指南
一、错误日志筛选方法
1. 基础筛选技巧
- 按时间范围筛选:使用或日志管理工具筛选特定时间段内的错误
- sed -n '/2023-11-01 00:00:00/,/2023-11-01 23:59:59/p' server.log
- # 或
- awk '/2023-11-01 00:00:00/,/2023-11-01 23:59:59/' server.log
复制代码
- grep -E "ERROR|CRITICAL|ALERT" server.log
复制代码
- grep "500 Internal Server Error" server.log
复制代码
2. 高级筛选工具
- awk '$5 ~ /ERROR/ && $9 > 500 {print $0}' access.log # 示例:筛选HTTP错误
复制代码
- cat log.json | jq 'select(.level == "error")'
复制代码
二、错误日志统计方法
1. 基本统计
- grep "ERROR" server.log | awk '{print $7}' | sort | uniq -c | sort -nr
复制代码
- grep -o "ERROR" server.log | wc -l
- # 或按时间统计
- grep "ERROR" server.log | cut -d' ' -f1-2 | uniq -c
复制代码
2. 高级统计分析
- goaccess access.log --log-format=COMBINED
复制代码
- import re
- from collections import defaultdict
-
- error_counts = defaultdict(int)
- with open('server.log') as f:
- for line in f:
- if 'ERROR' in line:
- match = re.search(r'ERROR: (\w+)', line) # 根据实际日志格式调整
- if match:
- error_counts[match.group(1)] += 1
-
- for error, count in sorted(error_counts.items(), key=lambda x: x[1], reverse=True):
- print(f"{error}: {count}")
复制代码
三、故障复盘流程
1. 故障识别阶段
- 收集所有相关日志:应用日志、系统日志、数据库日志、网络设备日志
- 确定故障时间范围:从监控系统或用户报告获取精确时间
- 初步分类:区分是硬件故障、软件缺陷、配置错误还是外部攻击
2. 根本原因分析
- 5 Why分析法:连续追问"为什么"直到找到根本原因
- 鱼骨图(因果图):可视化分析各种可能原因
- 时间线分析法:按时间顺序排列事件,找出触发点
3. 复盘模板- 故障概述:
- - 发生时间:[具体时间]
- - 影响范围:[受影响的服务/用户]
- - 持续时间:[从开始到恢复的时间]
- 故障现象:
- - [现象1]
- - [现象2]
- ...
- 根本原因:
- - 直接原因:[如:数据库连接池耗尽]
- - 根本原因:[如:未设置合理的连接池最大值]
- 解决过程:
- 1. [临时措施1]
- 2. [临时措施2]
- ...
- 预防措施:
- - [措施1:如增加监控警报]
- - [措施2:如实施自动扩展]
- ...
- 经验教训:
- - [教训1]
- - [教训2]
- ...
复制代码
四、最佳实践建议
- 日志标准化:
- 统一日志格式(时间、级别、模块、错误码、消息)
- 使用结构化日志(JSON格式)
- 自动化监控:
- 设置关键错误阈值警报
- 实现日志聚合与分析(ELK栈、Splunk等)
- 定期复盘机制:
- 每月进行一次重大故障复盘
- 建立故障知识库,记录解决方案
- 日志轮转与归档:
- 配置合理的日志轮转策略
- 长期保存关键日志用于趋势分析
通过系统化的日志筛选、统计和故障复盘流程,可以显著提高系统可靠性,缩短故障恢复时间,并预防类似问题的再次发生。 |
|