2. 云原生日志平台基础架构:日志采集层、传输层、存储层、查询层的组件拓扑概览

在 Log Label 接入与租户配额校准之前,必须清晰理解云原生日志平台的四层组件拓扑。每一层承担不同的职责,且与 Log Label 的注入、传递、索引与查询路径紧密相关。本节将逐层拆解其核心组件与交互关系。

2.1 四层架构总览

云原生日志平台采用分层解耦设计,从日志产生到最终可视化,依次经过采集层、传输层、存储层与查询层。每一层均可独立扩展,并通过标准接口(如 gRPC、Kafka、HTTP)进行数据交换。

架构设计原则: 采集层无状态化、传输层缓冲削峰、存储层冷热分离、查询层索引加速。Log Label 在采集层注入,在传输层保持透传,在存储层作为索引字段,在查询层用于过滤与聚合。
云原生日志平台四层组件拓扑概览 采集层(Agent Layer) Fluent Bit Filebeat Vector OpenTelemetry Collector DaemonSet / Sidecar 模式部署 Log Label 注入(namespace/pod/container) 传输层(Transport Layer) Kafka(核心缓冲队列) gRPC Stream NATS / Pulsar Topic 分区:按租户/集群/日志类型 Log Label 透传,不修改 存储层(Storage Layer) Elasticsearch / OpenSearch Loki(对象存储 + 索引) ClickHouse 索引模板:Log Label 作为 keyword 字段 租户隔离:按 Label 值路由到不同索引/表 查询层(Query Layer) Kibana / Grafana LogQL / ES DSL 租户配额校验 API 查询时通过 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 或拒绝写入。
  • 审计日志: 记录每个租户的查询次数、数据扫描量,用于后续成本分摊。
查询层 Log Label 过滤与配额校验流程 用户查询请求 配额校验 API 拒绝(429) 查询引擎 Log Label 过滤 返回结果

2.6 组件拓扑与 Log Label 的映射关系

下表总结了 Log Label 在各层中的具体形态与作用,帮助理解后续配额校准的数据链路。

层级 Log Label 表现形式 操作 对配额校准的影响
采集层 JSON 字段(如 {"namespace":"prod","pod":"web-0"}) 注入 确定日志归属租户
传输层 消息头或消息体中的 key-value 透传 保证标签不丢失
存储层 索引 keyword 字段 / Loki label 索引 按标签统计写入量
查询层 查询过滤条件 过滤 + 校验 按标签限制查询范围
核心结论: Log Label 是贯穿四层架构的“租户身份证”。采集层注入后,后续层只读不写,保证链路一致性。租户配额校准的准确性,直接取决于 Log Label 在各层的完整传递与正确索引。