跳到主要内容

服务端日志采集

问题

服务端日志如何采集?有哪些常见方案?

答案

服务端数据源

数据源说明示例
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

相关链接