日志

日志系统设计

日志是系统可观测性的基础,IMS 作为企业级系统,需要完善的日志体系支撑问题排查、性能分析、安全审计等场景。

一、结构化日志

使用 JSON 格式日志,便于解析和检索:

{
  "timestamp": "2026-05-18T10:30:00Z",
  "level": "INFO",
  "traceId": "abc123",
  "service": "order-service",
  "method": "createOrder",
  "userId": "user-456",
  "duration": 125,
  "message": "Order created successfully",
  "orderId": "ORD-20260518-001"
}

二、日志级别规范

  • ERROR:需要立即处理的错误,影响核心功能
  • WARN:潜在问题,但不影响业务流程
  • INFO:关键业务流程节点,如登录、订单创建
  • DEBUG:开发调试信息,生产环境可关闭

三、ELK 日志架构

  • Filebeat:轻量级日志采集器,安装在每台服务器
  • Logstash:日志清洗、转换、过滤
  • Elasticsearch:分布式全文搜索引擎
  • Kibana:可视化查询与分析界面
/* Logstash 配置示例 */
input {
  beats {
    port => 5044
  }
}
filter {
  json {
    source => "message"
  }
  date {
    match => ["timestamp", "ISO8601"]
  }
}
output {
  elasticsearch {
    hosts => ["es:9200"]
    index => "ims-%{+YYYY.MM.dd}"
  }
}

四、分布式追踪

使用 SkyWalking 或 Jaeger 追踪跨服务请求:

  • Trace ID:贯穿整个请求链路
  • Span ID:每个服务的调用单元
  • Parent ID:调用关系
/* 在 HTTP 请求头中传递 Trace ID */
X-B3-TraceId: abc123def456
X-B3-SpanId: span001
X-B3-ParentSpanId: parent001

五、日志规范建议

  • 日志内容不包含敏感信息(密码、token、身份证等)
  • 关键操作记录操作人、操作时间、操作内容、结果
  • 异常日志记录完整堆栈信息
  • 日志文件按日期轮转,保留 30 天
推荐技术栈:
  • 日志采集:Filebeat(比 Logstash 轻量)
  • 日志存储:Elasticsearch + Kibana
  • 分布式追踪:SkyWalking(国产,部署简单)
  • 日志告警:ElastAlert 或 Grafana Alert

六、总结

  • 使用 JSON 结构化日志,便于检索分析
  • 合理选择日志级别,避免信息过载
  • ELK 是日志收集分析的标准方案
  • 分布式追踪定位跨服务调用问题