3. 日志平台架构概览:常见日志平台组件、数据流与版本依赖
在构建基于 Kubernetes Deployment 的日志平台时,理解各组件的职责、数据流转路径以及版本间的兼容性约束,是确保部署校验成功的前提。本章将系统梳理 ELK/EFK 技术栈的核心组件、典型数据流以及版本依赖关系。
3.1 核心组件与职责
日志平台通常由四个核心组件构成,每个组件在数据链路中承担明确的角色:
| 组件 | 角色 | 核心功能 | 常见部署形态 |
|---|---|---|---|
| Filebeat | 轻量日志采集器 | 监控日志文件/标准输出,读取、过滤、转发日志事件 | DaemonSet(节点级)或 Sidecar(Pod 级) |
| Logstash | 数据处理管道 | 接收多源日志,执行解析、转换、过滤、富化后输出 | Deployment(有状态/无状态) |
| Elasticsearch | 分布式搜索与分析引擎 | 存储、索引、搜索、聚合日志数据 | StatefulSet(有状态集群) |
| Kibana | 可视化与交互层 | 查询 Elasticsearch 数据,生成仪表盘、告警规则 | Deployment(无状态) |
架构选型提示: 在 Kubernetes 环境中,Filebeat 通常以 DaemonSet 部署在每个节点上采集容器标准输出;Logstash 作为可选中间处理层,当需要复杂数据清洗或格式转换时引入;Elasticsearch 和 Kibana 构成存储与展示核心。
3.2 数据流与处理阶段
日志数据从产生到可视化,经历四个标准阶段。下图展示了完整的端到端数据流:
3.3 版本依赖矩阵
版本一致性是部署校验的核心检查项。不同组件之间的版本兼容性遵循严格的规则,下表总结了关键依赖关系:
| 源组件 | 目标组件 | 版本兼容规则 | 常见不兼容场景 |
|---|---|---|---|
| Filebeat | Elasticsearch | 主版本号 ≤ ES 主版本号 +1 | Filebeat 6.x 向 ES 8.x 发送数据(字段映射失败) |
| Filebeat | Logstash | 主版本号一致或小版本向前兼容 | Filebeat 8.x 使用 Logstash 7.x 不支持的 output 协议 |
| Logstash | Elasticsearch | 主版本号一致(推荐),或 Logstash 主版本 ≤ ES 主版本 | Logstash 7.x 使用 ES 8.x 已移除的 index template API |
| Kibana | Elasticsearch | 主版本号必须完全一致(如 7.17.x ↔ 7.17.x) | Kibana 8.0 连接 ES 7.17(API 不兼容,页面报错) |
| Elasticsearch | Elasticsearch(集群内) | 同一集群内版本必须一致 | 混合 7.16 与 7.17 节点导致集群状态异常 |
版本校验红线: Kibana 与 Elasticsearch 的主版本号必须严格一致,这是日志平台部署校验中最容易出错也最致命的问题。在 Deployment 的镜像版本声明中,务必使用相同的 MAJOR.MINOR 版本。
3.4 数据流中的版本一致性影响点
在数据流的不同阶段,版本不一致会导致不同层面的故障:
- 采集阶段: Filebeat 使用 Elasticsearch Output 时,若版本差距过大,可能导致字段类型映射错误(如
@timestamp格式变更)。 - 传输阶段: 引入 Kafka 作为缓冲层时,Logstash 的 Kafka Input/Output 插件版本需与 Kafka Broker 版本匹配。
- 处理阶段: Logstash 的 Elasticsearch Filter 插件依赖 ES 的 REST API 版本,7.x 与 8.x 的索引生命周期管理 API 存在差异。
- 存储与展示阶段: Kibana 的 Saved Objects 与 ES 索引模板版本绑定,升级 ES 后未同步升级 Kibana 会导致仪表盘加载失败。
3.5 版本一致性校验清单
在后续章节的 Deployment 部署校验中,以下清单将作为版本检查的基准:
- 镜像版本声明: 检查 Deployment YAML 中所有组件的 image tag 是否属于同一主版本系列。
- Kibana ↔ ES 版本对: 确认 Kibana 与 Elasticsearch 的 MAJOR.MINOR 完全一致。
- Filebeat 输出配置: 验证 Filebeat 的
output.elasticsearch或output.logstash协议版本与目标组件兼容。 - Logstash 插件版本: 检查 Logstash 使用的 Elasticsearch Output 插件版本是否与 ES 集群版本匹配。
- 集群内节点版本: 若 Elasticsearch 以 StatefulSet 多副本部署,确保所有 Pod 的镜像版本一致。