日志收集与预处理
日志来源与格式
光年服务器日志通常包含以下类型:

- 访问日志:记录HTTP请求信息(如URL、状态码、IP地址)
- 错误日志:记录服务运行异常(如500错误、数据库连接失败)
- 性能日志:记录响应时间、资源占用(CPU/内存/磁盘IO)
- 安全日志:记录登录尝试、权限变更等敏感操作
常见日志格式示例:
168.1.100 [10/Oct/2023:14:23:45 +0800] "GET /api/v1/data HTTP/1.1" 200 1234 0.123ms
日志采集工具
工具名称 |
适用场景 |
核心功能 |
Filebeat |
分布式服务器日志收集 |
轻量级、支持多种输出(Elasticsearch/Logstash) |
Fluentd |
复杂日志处理需求 |
插件丰富、支持日志格式转换 |
Logstash |
实时日志处理与分析 |
正则解析、多输入输出适配 |
日志解析与结构化
字段提取规则
通过正则表达式或JSON解析将非结构化日志转为结构化数据:
# 示例:Nginx访问日志解析正则
log_pattern = r'(?P<ip>S+) S+ S+ [(?P<time>.+?)] "(?P<method>S+) (?P<url>S+)" (?P<status>d{3}) (?P<size>d+) (?P<response_time>d+.d+)ms'
数据清洗策略
原始字段 |
清洗规则 |
目标字段 |
response_time |
过滤非规值(如负数、超过阈值) |
valid_response_time |
url |
提取路径部分(去除参数) |
path |
ip |
转换为IP地址对象 |
client_ip |
核心指标统计分析
基础访问指标
指标名称 |
计算方式 |
阈值示例 |
总请求量 |
COUNT() |
日均百万级 |
错误率 |
SUM(status>=400)/总请求量 |
<0.1% |
平均响应时间 |
AVERAGE(response_time) |
<500ms |
性能监控指标
graph LR
A[高错误率] --> B[检查代码/配置]
A --> C[检查依赖服务]
D[响应时间突增] --> E[定位慢查询]
D --> F[检查资源瓶颈]
异常检测与告警
异常模式识别
- 突发流量:1分钟内请求量超过历史均值3倍
- 错误聚集:5分钟内同类型错误>50次
- 响应退化:P95响应时间持续>1秒达1分钟
告警规则示例
告警类型 |
触发条件 |
通知渠道 |
紧急错误告警 |
错误率>5%持续1分钟 |
短信+钉钉机器人 |
性能降级告警 |
P99响应时间>2秒持续5分钟 |
邮件+企业微信 |
资源耗尽预警 |
磁盘使用率>90%持续10分钟 |
监控平台弹窗 |
存储与归档策略
热数据存储
- Elasticsearch:存储近30天日志(支持快速检索)
- Redis:缓存实时统计结果(如每分钟错误数)
冷数据归档
存储介质 |
数据范围 |
保留周期 |
HDFS/MinIO |
历史日志(按日期分区) |
1年 |
AWS Glacier |
压缩后的旧日志(低频访问) |
长期保存 |
常见问题与解决方案
日志采集延迟
- 现象:日志在Kibana中显示延迟>5分钟
- 解决方案:
- 检查Filebeat队列长度(
filebeat.yml
设置queue.size
)
- 增加Logstash处理线程数(
pipeline.workers
>=4)
- 优化网络带宽(启用GZIP压缩传输)
日志爆炸式增长
- 现象:单日日志量激增300%
- 解决方案:
- 实施采样策略(保留100%错误日志,抽样正常日志)
- 启用日志级别动态调整(如临时关闭DEBUG日志)
- 扩展存储集群(增加Elasticsearch节点)