2. 云原生日志平台基础架构:日志采集层、传输层、存储层、查询层的组件拓扑概览
在 Log Label 接入与租户配额校准之前,必须清晰理解云原生日志平台的四层组件拓扑。每一层承担不同的职责,且与 Log Label 的注入、传递、索引与查询路径紧密相关。本节将逐层拆解其核心组件与交互关系。
2.1 四层架构总览
云原生日志平台采用分层解耦设计,从日志产生到最终可视化,依次经过采集层、传输层、存储层与查询层。每一层均可独立扩展,并通过标准接口(如 gRPC、Kafka、HTTP)进行数据交换。
架构设计原则: 采集层无状态化、传输层缓冲削峰、存储层冷热分离、查询层索引加速。Log Label 在采集层注入,在传输层保持透传,在存储层作为索引字段,在查询层用于过滤与聚合。
2.2 采集层:Log Label 的注入起点
采集层是日志数据进入平台的第一个环节,也是 Log Label 注入的关键位置。采集器以 DaemonSet 或 Sidecar 模式运行在 Kubernetes 节点或 Pod 内,负责读取容器标准输出、日志文件或系统日志。
| 采集器 | 部署模式 | Log Label 注入方式 | 适用场景 |
|---|---|---|---|
| Fluent Bit | DaemonSet | Kubernetes Filter 自动添加 namespace/pod/container 标签 | 轻量级、高性能,社区广泛使用 |
| Filebeat | DaemonSet | add_kubernetes_metadata 处理器 | 与 Elastic Stack 深度集成 |
| Vector | DaemonSet / Sidecar | Transform 组件动态注入自定义标签 | 复杂路由与多下游输出 |
| OpenTelemetry Collector | Sidecar / Gateway | Attributes Processor 添加资源属性 | 可观测性统一数据面 |
实践建议: 在采集层统一注入
namespace、pod_name、container_name、cluster_id 四个基础标签,作为租户配额校准的最小维度集合。后续层不再修改这些标签,保证链路一致性。
2.3 传输层:缓冲与路由
传输层承担日志数据的缓冲、削峰、路由与可靠投递职责。Kafka 是最主流的选择,其 Topic 分区机制天然支持按租户或日志类型进行数据隔离。
- 核心组件: Kafka 集群(建议 3 节点起步)、可选 gRPC Stream 用于低延迟场景。
- Topic 设计: 按
租户ID_日志类型或集群_命名空间分区,保证同一租户的日志顺序性。 - Log Label 处理: 传输层仅透传,不解析、不修改、不聚合。保证标签的原始性。
- 关键指标: 生产速率(msg/s)、消费滞后(lag)、分区重平衡次数。
避坑提醒: 传输层不要对 Log Label 做任何压缩或编码转换,否则会导致存储层索引字段类型不匹配,查询时无法精确过滤。保持 JSON 或 Protobuf 原始结构。
2.4 存储层:索引与隔离
存储层是日志数据的持久化与索引核心。Log Label 在此层被映射为索引字段(keyword 类型),用于后续的租户隔离与配额统计。
| 存储引擎 | 索引模型 | Log Label 字段类型 | 租户隔离策略 |
|---|---|---|---|
| Elasticsearch | 倒排索引 + 分片 | keyword | 按 namespace 或 tenant_id 路由到不同索引 |
| Loki | 对象存储 + 流式索引 | label(等同于 tag) | 按 label 值划分 streams |
| ClickHouse | 列式存储 + 排序键 | String / LowCardinality | 按 tenant_id 分区或分表 |
存储层需要为 Log Label 字段建立索引模板,确保新接入的租户自动继承正确的 mapping 配置,避免动态映射导致字段类型冲突。
2.5 查询层:过滤与配额校验
查询层面向最终用户与运维人员,提供日志检索、聚合分析与租户配额管理能力。Log Label 在此层作为过滤条件,确保用户只能看到自己租户的数据。
- 查询入口: Kibana(ES)、Grafana(Loki)、自研 Web UI。
- 查询语言: ES DSL、LogQL、SQL(ClickHouse)。
- 配额校验: 每次查询或写入前,通过 API 校验当前租户的日/月写入量是否超限。超限时返回 429 或拒绝写入。
- 审计日志: 记录每个租户的查询次数、数据扫描量,用于后续成本分摊。
2.6 组件拓扑与 Log Label 的映射关系
下表总结了 Log Label 在各层中的具体形态与作用,帮助理解后续配额校准的数据链路。
| 层级 | Log Label 表现形式 | 操作 | 对配额校准的影响 |
|---|---|---|---|
| 采集层 | JSON 字段(如 {"namespace":"prod","pod":"web-0"}) |
注入 | 确定日志归属租户 |
| 传输层 | 消息头或消息体中的 key-value | 透传 | 保证标签不丢失 |
| 存储层 | 索引 keyword 字段 / Loki label | 索引 | 按标签统计写入量 |
| 查询层 | 查询过滤条件 | 过滤 + 校验 | 按标签限制查询范围 |
核心结论: Log Label 是贯穿四层架构的“租户身份证”。采集层注入后,后续层只读不写,保证链路一致性。租户配额校准的准确性,直接取决于 Log Label 在各层的完整传递与正确索引。