4. 日志架构演进:从单体日志到分布式日志,再到多租户日志平台的架构演进路线

日志系统是后端可观测性的基石。随着业务规模从单机走向分布式、从单一团队走向多租户平台,日志架构也经历了三次关键演进。理解这条演进路线,是设计多租户隔离日志平台的前提。

4.1 第一阶段:单体日志架构

在单体应用时代,日志通常直接写入本地文件系统。应用进程通过日志框架(如 Log4j、Logback)将日志输出到磁盘文件,运维人员通过 SSH 登录服务器,使用 tail、grep 等命令排查问题。

核心特征: 本地文件存储、无集中采集、无租户概念、依赖人工登录排查。
维度 单体日志架构
存储 本地磁盘文件
采集 无,直接写入文件
检索 tail / grep / less
租户隔离 不适用
典型问题 磁盘写满、日志丢失、无法跨主机关联
架构局限: 单体日志无法应对微服务拆分后的跨服务调用链追踪,也无法满足多团队共享基础设施时的数据隔离需求。

4.2 第二阶段:分布式日志架构

当应用拆分为微服务,日志分散在成百上千个容器或虚拟机中。分布式日志架构应运而生,核心模式为:采集 → 缓冲 → 传输 → 存储 → 检索。

典型技术栈包括:

  • 采集端: Filebeat、Fluentd、Logstash
  • 缓冲层: Kafka、Redis
  • 存储与检索: Elasticsearch、OpenSearch
  • 可视化: Kibana、Grafana

这一阶段解决了日志集中化的问题,但租户隔离仍停留在粗粒度层面:通常通过 Elasticsearch 的 Index 或 Index Pattern 做逻辑区分,缺乏资源隔离和访问控制。

常见陷阱: 多个业务线共享同一个 Elasticsearch 集群时,一个租户的异常查询(如大范围通配符搜索)可能拖垮整个集群,影响所有租户的日志写入与检索。

4.3 第三阶段:多租户日志平台架构

多租户日志平台在分布式日志架构的基础上,增加了租户身份注入、资源隔离、配额管理、访问控制四大核心能力。每个租户拥有逻辑或物理上独立的日志管道,互不干扰。

下图展示了从单体到多租户的完整演进路线:

日志架构演进路线:单体 → 分布式 → 多租户 阶段一:单体日志 本地文件写入 tail/grep 排查 无租户概念 微服务化 阶段二:分布式日志 采集 → 缓冲 → 存储 ELK/EFK 技术栈 逻辑索引隔离 多租户需求 阶段三:多租户平台 租户身份注入 资源隔离 + 配额 细粒度访问控制 多租户平台新增核心能力 能力 说明 实现方式 1. 租户身份注入 每条日志携带租户 ID 日志框架 MDC / 采集端标签 2. 资源隔离 计算/存储资源不共享 独立 Index / 独立集群 / 分区 3. 配额管理 限制写入速率与存储量 采集端限流 + ES Rollover 4. 访问控制 租户只能查看自己的日志 RBAC + Index 权限 + 字段级脱敏

4.4 多租户日志平台架构详解

一个成熟的多租户日志平台,在分布式日志管道的基础上,增加了以下关键设计:

  1. 租户身份贯穿全链路: 从应用日志框架的 MDC(Mapped Diagnostic Context)注入租户 ID,到采集端、缓冲层、存储层,租户标识始终保留。
  2. 写入隔离: 每个租户拥有独立的 Kafka Topic 或 Partition,避免租户 A 的日志洪峰阻塞租户 B 的写入。
  3. 存储隔离: 每个租户使用独立的 Elasticsearch Index 或 Index Alias,配合 Shard 分配策略实现资源隔离。
  4. 查询隔离: 查询时强制附加租户 ID 过滤条件,防止跨租户数据泄露。
  5. 配额与限流: 对每个租户的日志写入速率、存储总量、查询并发进行配额控制。
架构原则: 多租户日志平台的设计核心是“身份不丢失、资源不争抢、数据不泄露”。所有组件必须感知租户上下文。

4.5 三种架构对比总结

对比维度 单体日志 分布式日志 多租户日志平台
适用规模 单机 / 小团队 微服务 / 中大型团队 多业务线 / SaaS 平台
租户隔离 无 逻辑隔离(Index) 物理 + 逻辑隔离
资源管控 无 无或弱 配额 + 限流 + 熔断
访问控制 文件权限 Index 级别 字段级 + 行级
运维复杂度 低 中 高(需平台化支撑)
典型技术 Logback + 本地文件 ELK / EFK 自定义采集 + Kafka + ES 多 Index + RBAC

4.6 演进启示:从工具到平台

日志架构的演进本质上是从“工具思维”向“平台思维”的转变。单体日志是工具,解决“能看日志”的问题;分布式日志是系统,解决“能查日志”的问题;多租户日志平台是服务,解决“安全、可控、可计量地使用日志”的问题。

设计建议: 如果你的团队正在从分布式日志向多租户平台演进,优先解决租户身份注入和写入隔离两个基础问题,再逐步完善配额与访问控制。