日志分析
概览
日志对于调试和监控至关重要。有效的日志分析可以快速识别问题并进行根本原因分析。
何时使用
- 故障排除错误
- 性能调查
- 安全事件分析
- 审计用户行为
- 监控应用健康
指令
1. 结构化日志记录
// 好的:结构化日志(机器可读)
logger.info({
level: 'INFO',
timestamp: '2024-01-15T10:30:00Z',
service: 'auth-service',
user_id: '12345',
action: 'user_login',
status: 'success',
duration_ms: 150,
ip_address: '192.168.1.1'
});
// 坏的:非结构化日志(难以解析)
console.log('User 12345 logged in successfully in 150ms from 192.168.1.1');
// JSON格式(Elasticsearch友好)
{
"@timestamp": "2024-01-15T10:30:00Z",
"level": "ERROR",
"service": "api-gateway",
"trace_id": "abc123",
"message": "Database connection failed",
"error": {
"type": "ConnectionError",
"code": "ECONNREFUSED"
},
"context": {
"database": "users",
"operation": "SELECT"
}
}
2. 日志级别和模式
日志级别:
DEBUG: 详细的诊断信息
- 变量值
- 函数进入/退出
- 中间计算
- 使用:仅开发
INFO: 一般信息性消息
- 启动/关闭
- 用户行为
- 配置更改
- 使用:生产(正常操作)
WARN: 警告消息(潜在问题)
- 弃用的API使用
- 性能下降
- 资源限制接近
- 使用:生产(尽快调查)
ERROR: 错误条件
- 失败的操作
- 异常
- 失败的请求
- 使用:生产(需要行动)
FATAL/CRITICAL: 系统不可用
- 严重故障
- 内存不足
- 数据损坏
- 使用:生产(立即行动)
---
日志模式:
请求日志:
- 请求ID(trace_id)
- 方法+路径
- 状态码
- 持续时间
- 请求大小/响应大小
错误日志:
- 错误类型/代码
- 错误消息
- 堆栈跟踪
- 上下文(user_id, session_id)
- 时间戳
业务事件:
- 事件类型
- 用户参与
- 影响/重要性
- 时间戳
- 相关上下文
3. 日志分析工具
日志聚合:
ELK Stack(Elasticsearch, Logstash, Kibana):
- Logstash:解析和处理日志
- Elasticsearch:搜索和分析
- Kibana:可视化和仪表板
- 使用:大规模,复杂查询
Splunk:
- 全面的日志管理
- 实时搜索和分析
- 仪表板和警报
- 使用:企业(昂贵)
CloudWatch(AWS):
- 与AWS服务集成
- 日志洞察查询
- 仪表板
- 使用:基于AWS的系统
Datadog:
- 应用性能监控
- 日志管理
- 实时警报
- 使用:SaaS监控
---
日志分析技术:
Grep/Awk:
grep "ERROR" app.log
awk '{print $1, $4}' app.log
过滤:
按时间戳过滤
按服务过滤
按错误类型过滤
按用户过滤
搜索:
搜索错误模式
搜索用户行为
搜索跟踪ID
搜索IP地址
聚合:
计算发生次数
按错误类型分组
计算持续时间百分位数
错误率随时间变化
4. 常见日志分析查询
在过去一小时内查找错误:
timestamp: last_1h AND level: ERROR
跟踪用户活动:
user_id: 12345 AND action: *
查找慢请求:
duration_ms: >1000 AND level: INFO
按服务分析错误率:
level: ERROR | stats count by service
查找失败的数据库操作:
error.type: "DatabaseError" | stats count
追踪请求流程:
trace_id: "abc123" | sort by timestamp
---
清单:
[ ] 实施结构化日志记录
[ ] 所有错误都记录了上下文
[ ] 使用请求ID/跟踪ID
[ ] 不记录敏感数据(密码,令牌)
[ ] 适当使用日志级别
[ ] 设置日志保留策略
[ ] 高容量事件的日志采样
[ ] 为错误配置警报
[ ] 创建仪表板
[ ] 定期安排日志审查
[ ] 日志分析工具可访问
[ ] 团队接受查询日志培训
要点
- 使用结构化JSON日志记录
- 包括跟踪ID以跟踪请求
- 记录适当的级别(DEBUG/INFO/ERROR)
- 永远不要记录敏感数据(密码,令牌)
- 集中聚合日志
- 为关键指标创建仪表板
- 对错误率和关键问题设置警报
- 适当保留日志
- 通过跟踪ID搜索日志进行故障排除
- 定期审查日志以查找模式