12.1 引言:中间件日志系统为何如此关键?
数据库中间件作为连接前端应用与后端数据库的“网关”,承载着路由、负载均衡、SQL 改写、权限控制等复杂逻辑。
在出现 性能问题、故障排查、安全审计 等场景中,若没有完善的日志体系,很容易“黑盒作业”,极难定位问题。
因此,需要构建一套覆盖全链路的日志追踪系统,支持:
-
✅ SQL 级别日志追踪
-
✅ 异常与错误记录
-
✅ 慢查询与性能监控
-
✅ 请求链路追踪(Trace ID)
12.2 中间件日志系统设计目标
目标 | 说明 |
---|---|
全链路追踪 | 从入口请求到数据库响应全流程可观测 |
多级日志类型 | info/debug/warn/error/fatal/trace |
支持多输出通道 | 控制台、文件、Kafka、ELK |
支持动态切换日志级别 | 热更新、无需重启 |
与监控系统联动 | 提供日志指标用于 Prometheus、Grafana |
12.3 日志体系结构设计
graph TD
A[请求入口] --> B[日志收集器]
B --> C1[访问日志]
B --> C2[SQL 执行日志]
B --> C3[异常与错误日志]
C1 --> D1[本地日志文件]
C2 --> D2[Kafka/Pulsar]
C3 --> D3[ElasticSearch]B --> E[日志格式标准化处理]
E --> F[Trace ID、Span ID 注入]
-
核心组件:
-
Logger
: 日志采集入口 -
Appender
: 输出器(本地文件/网络/系统) -
Encoder
: 编码器(JSON、text) -
Filter
: 日志过滤器(日志级别、租户标识等)
-
📝 12.4 日志分类与字段设计
🚀 12.4.1 SQL 执行日志
{"trace_id": "ab12-456cd-789","tenant": "tenant_a","sql": "SELECT * FROM user WHERE id=1","datasource": "db_slave_1","start_time": "2025-05-17T13:24:01Z","duration_ms": 34,"result": "success","rows": 1
}
❌ 12.4.2 错误与异常日志
{"level": "ERROR","time": "2025-05-17T13:25:01Z","trace_id": "ab12-456cd-789","module": "sql_router","message": "Route key not found in request","stack": "com.xxx.router.RouteException..."
}
🛠 12.4.3 慢查询日志
-
记录耗时超过阈值的 SQL
-
输出额外的 explain 分析字段
12.5 实现建议与细节
功能 | 实现方式 |
---|---|
Trace ID 注入 | 每次请求统一生成并透传到日志模块 |
日志级别动态调整 | 支持通过配置中心(如 Nacos)实时变更 |
日志切割与归档 | 支持基于日期/大小进行切割,压缩归档 |
日志脱敏处理 | 对手机号、身份证等字段模糊化 |
本地降级机制 | Kafka 异常时自动降级为文件持久化 |
12.6 日志追踪案例示意
假设中间件处理如下请求:
POST /query Body: SELECT * FROM orders WHERE user_id=1001
日志链路如下:
-
访问日志
记录客户端 IP、UA、请求时间 -
SQL 路由日志
指定使用 db_order_1 数据源 -
SQL 执行日志
执行成功,用时 20ms,返回 3 行数据 -
系统日志
记录某个字段执行了脱敏处理 -
Metrics 报警日志
SQL 慢于设定阈值(如 50ms)未报警
12.7 与可观测性平台集成
✅ 日志 + 指标 + 追踪 = 完整可观测体系
-
📊 日志(Log):记录业务上下文、异常、慢查询
-
📈 指标(Metrics):用于告警和趋势图展示(如 QPS、错误率)
-
🛰 追踪(Tracing):跨模块/服务调用链路追踪(可接入 OpenTelemetry)
12.8 最佳实践总结
实践 | 理由 |
---|---|
使用统一日志库封装 | 保证格式统一、便于后期维护 |
Trace ID 强制注入 | 实现链路级故障排查 |
关键操作日志持久化 | 方便审计与回溯 |
日志收敛与压缩归档 | 降低存储压力 |
日志可视化 | 接入 ELK / Loki 等系统 |
12.9 总结
本篇你学到:
-
数据库中间件日志系统应包含哪些模块
-
如何实现 SQL 级追踪、慢查询检测与错误分析
-
日志与可观测性系统如何融合
-
日志系统的落地建议与防坑经验