2. 日志平台架构基础:采集层、缓冲层、存储层与展示层
在云原生环境中,日志平台通常采用“采集 → 缓冲 → 存储 → 展示”的四层架构。每一层承担不同的职责,选型也直接影响版本漂移治理的复杂度。本章将逐一拆解各层的核心组件、数据流关系以及版本一致性关注点。
2.1 四层架构总览
下图展示了日志平台的标准分层结构,数据从业务容器出发,经过采集、缓冲、存储最终到达展示界面。
架构要点:四层之间通过标准协议(HTTP/gRPC/Syslog)或消息队列解耦。版本漂移可能发生在任意一层,但缓冲层往往是“版本锚点”——只要缓冲层接口稳定,上下游升级可以异步进行。
2.2 采集层:Fluentd 与 Logstash
采集层负责从 Pod、节点、持久卷等来源拉取或接收日志。Fluentd 和 Logstash 是当前最主流的云原生采集器。
| 对比维度 | Fluentd | Logstash |
|---|---|---|
| 部署方式 | DaemonSet / Sidecar | DaemonSet / 独立进程 |
| 资源占用 | 较低(C 核心 + Ruby 插件) | 较高(JVM 堆内存) |
| 插件生态 | 1000+ 社区插件 | 200+ 官方插件 |
| 版本漂移风险 | 插件版本与核心版本耦合 | input/filter/output 插件独立版本 |
| 配置热加载 | 支持(reload 信号) | 支持(pipeline 重载) |
2.3 缓冲层:Kafka 与内存/磁盘 Buffer
缓冲层是日志平台的“蓄水池”,用于削峰填谷、解耦采集与存储。Kafka 是分布式缓冲的事实标准,而 Fluentd/Logstash 也内置了内存或磁盘 Buffer 作为轻量替代。
- Kafka 缓冲:适合大规模、多消费者场景。版本漂移主要体现为 Producer/Consumer 客户端版本与 Broker 版本不匹配。
- 内存 Buffer:Fluentd 的
buf_memory和 Logstash 的memory queue,延迟低但重启会丢数据。 - 磁盘 Buffer:Fluentd 的
buf_file,保证持久性,但 I/O 开销较高。
版本一致性警示:Kafka 0.10.x 与 2.x 的消息协议不兼容。如果采集层使用旧版 Producer 客户端,而缓冲层升级到新版 Broker,会导致消息序列化失败。建议在集群内统一 Kafka 客户端版本,或使用兼容协议层。
2.4 存储层:Elasticsearch 与 Loki
存储层决定日志的索引策略、查询性能和保留周期。Elasticsearch 是全文搜索型存储,Loki 是标签索引型存储,两者在版本治理上差异显著。
| 特性 | Elasticsearch | Loki |
|---|---|---|
| 索引方式 | 倒排索引(全文搜索) | 标签索引 + 压缩块 |
| 版本兼容性 | 主版本间不兼容(6.x → 7.x 索引格式变更) | 小版本兼容,大版本需迁移 |
| 多集群治理 | 需统一 mapping 模板和 ILM 策略 | 需统一 label 命名和租户 ID |
| 版本漂移表现 | 索引写入失败、查询语法错误 | 标签查询不命中、日志行格式变化 |
2.5 展示层:Kibana 与 Grafana
展示层是用户与日志数据的交互界面。Kibana 与 Elasticsearch 深度绑定,Grafana 则通过 Loki 或 Elasticsearch 数据源实现多后端统一展示。
- Kibana:版本必须与 Elasticsearch 主版本一致(例如 7.17.x 对应 ES 7.x)。跨版本连接会导致仪表板加载失败或查询接口不兼容。
- Grafana:通过数据源插件连接后端。版本漂移风险较低,但 Loki 数据源插件版本需与 Loki API 版本匹配。
2.6 版本漂移在四层中的典型表现
下表汇总了各层常见的版本漂移场景及其影响范围,帮助你在多集群治理中快速定位问题。
| 层级 | 典型漂移场景 | 影响 | 检测手段 |
|---|---|---|---|
| 采集层 | Fluentd 0.12 插件在 1.x 核心上运行 | 插件崩溃、日志丢失 | 采集器启动日志、插件兼容性检查 |
| 缓冲层 | Kafka Producer 0.9 连接 2.8 Broker | 消息序列化失败、连接被拒绝 | Broker 端协议版本日志 |
| 存储层 | ES 6.x 索引被 7.x 节点读取 | 索引无法打开、查询报错 | 集群健康状态、索引版本元数据 |
| 展示层 | Kibana 7.10 连接 ES 8.0 | 仪表板加载失败、API 不兼容 | Kibana 状态页、ES 兼容性检查 |
治理切入点:版本漂移治理应从“缓冲层”开始。Kafka 的协议版本协商机制(
inter.broker.protocol.version)可以作为多集群版本统一的基准点。采集层和存储层围绕缓冲层进行版本对齐,展示层则通过数据源版本约束来兜底。