日志是系统可观测性的基础,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 是日志收集分析的标准方案
- 分布式追踪定位跨服务调用问题