日志分析 log-analysis

日志分析是一种技术,用于通过分析应用程序和系统日志来识别错误、模式和根本原因,以实现有效的调试和监控。

DevOps 0 次安装 0 次浏览 更新于 3/4/2026

日志分析

概览

日志对于调试和监控至关重要。有效的日志分析可以快速识别问题并进行根本原因分析。

何时使用

  • 故障排除错误
  • 性能调查
  • 安全事件分析
  • 审计用户行为
  • 监控应用健康

指令

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搜索日志进行故障排除
  • 定期审查日志以查找模式