服务端日志采集
问题
服务端日志如何采集?有哪些常见方案?
答案
服务端数据源
| 数据源 | 说明 | 示例 |
|---|---|---|
| API 接口日志 | 记录每次请求 | 请求参数、响应状态、耗时 |
| 业务日志 | 关键业务节点 | 下单成功、支付回调 |
| 中间件日志 | Nginx/数据库日志 | 访问日志、慢查询日志 |
| 应用错误日志 | 异常堆栈 | Java Exception、Python Traceback |
采集架构
结构化日志规范
{
"timestamp": "2024-01-15T10:30:00.123Z",
"level": "INFO",
"service": "order-service",
"trace_id": "abc123",
"span_id": "def456",
"method": "POST",
"path": "/api/v1/orders",
"status_code": 200,
"duration_ms": 156,
"user_id": "u_12345",
"request_body": {"product_id": "p_001", "quantity": 1},
"response_body": {"order_id": "o_67890"}
}
日志采集最佳实践
- 日志必须是结构化 JSON(不要自由文本)
- 必须包含 trace_id(链路追踪,关联全链路日志)
- 按 level 分级:DEBUG / INFO / WARN / ERROR
- 注意 PII 脱敏:手机号、身份证等需加密或脱敏
常见面试问题
Q1: 前端埋点和服务端日志有什么区别?
答案:
| 维度 | 前端埋点 | 服务端日志 |
|---|---|---|
| 数据来源 | 浏览器/App | 后端服务 |
| 准确性 | 可能丢失/篡改 | 准确可靠 |
| 信息维度 | 用户行为、设备信息 | 业务逻辑、系统状态 |
| 适用场景 | 用户行为分析 | 业务指标、故障排查 |
Q2: 服务端日志量太大怎么处理?
答案:
- 采样:DEBUG 日志只采集 1%
- 分级存储:ERROR 日志保留 90 天,INFO 保留 7 天
- Kafka 缓冲:削峰填谷,下游消费能力不足时不丢数据
- 冷热分离:热数据存 ES,超过 7 天转 S3/HDFS