4、日志平台组件拓扑图概述:典型云原生日志平台(如Loki+Promtail+Grafana)的组件拓扑

在云原生环境中,日志平台通常采用轻量级、可水平扩展、与Kubernetes深度集成的架构。以 Loki + Promtail + Grafana 为核心的技术栈已成为业界事实标准。本章将拆解该组合的组件拓扑,明确各模块职责与数据流向,为后续基于Helm快照的拓扑回退演练奠定基础。

4.1 核心组件与职责

典型云原生日志平台由以下四个核心组件构成,它们各自承担独立职责,并通过标准HTTP/gRPC接口进行通信:

组件 角色 核心职责 部署形态
Promtail 日志采集器 从节点文件、journald、容器标准输出等源抓取日志,添加标签并推送至Loki DaemonSet(每节点一个)
Loki 日志存储与查询引擎 接收日志流,按标签索引并压缩存储;提供LogQL查询接口 StatefulSet(可水平扩展)
Grafana 可视化与告警面板 连接Loki数据源,展示日志仪表盘;配置基于日志的告警规则 Deployment(通常单副本或HA)
MinIO / S3 对象存储后端 持久化存储Loki的日志块(chunks)与索引(boltdb-shipper) Deployment / 外部服务
架构要点: Promtail 不负责日志持久化,仅做采集与转发;Loki 不负责日志可视化,仅做存储与查询;Grafana 不存储日志数据,仅做展示与告警。这种职责分离设计使得每个组件都可以独立扩缩容与升级。

4.2 组件拓扑关系与数据流

下图展示了典型云原生日志平台在Kubernetes集群内的组件拓扑关系,包含数据采集、存储、查询与可视化的完整链路:

Loki + Promtail + Grafana 组件拓扑图 云原生日志平台组件拓扑图(Loki + Promtail + Grafana) Kubernetes 集群 Promtail DaemonSet (每节点) Loki StatefulSet (3副本) Grafana Deployment (1+副本) MinIO / S3 对象存储后端 业务Pod 容器标准输出 / 日志文件 读取日志 HTTP/gRPC 推送 存储chunks/index LogQL 查询 数据流说明: ① Promtail 从每个节点的业务Pod采集日志 → ② 通过HTTP/gRPC推送到Loki ③ Loki 将日志块与索引持久化到MinIO/S3对象存储 → ④ Grafana 通过LogQL查询Loki并展示

4.3 组件间通信协议与端口

各组件之间通过明确的协议与端口进行通信,理解这些端口对于后续Helm配置与网络策略管理至关重要:

通信链路 协议 默认端口 说明
Promtail → Loki HTTP/gRPC 3100 (HTTP) / 9095 (gRPC) Promtail 通过 push API 发送日志流
Grafana → Loki HTTP 3100 Grafana 通过 LogQL 查询日志数据
Loki → MinIO/S3 HTTPS (S3 API) 443 / 9000 Loki 使用 boltdb-shipper 存储索引与chunks
用户 → Grafana HTTP/HTTPS 3000 浏览器访问 Grafana 仪表盘

4.4 拓扑回退的关键观察点

在进行Helm快照回退演练时,需要特别关注以下拓扑层面的依赖关系:

  • 存储层依赖: Loki 强依赖 MinIO/S3 对象存储的可用性。如果存储后端在回退过程中发生配置变更(如bucket名称、endpoint地址),可能导致Loki无法读取历史日志块。
  • 采集层连续性: Promtail 作为DaemonSet,其配置(如标签映射、scrape配置)直接影响日志数据的完整性。回退Promtail配置时需确保与Loki的标签schema兼容。
  • 查询层兼容性: Grafana 的Loki数据源配置(URL、认证方式)必须与Loki服务版本匹配。回退Grafana版本时需验证LogQL语法兼容性。
  • 网络策略影响: 在Kubernetes NetworkPolicy环境下,回退可能导致组件间通信中断,需提前验证网络策略是否覆盖回退后的Pod标签。
演练提示: 在后续章节的Helm快照回退演练中,我们将重点验证Loki存储配置回退与Promtail采集配置回退两个高风险场景。请牢记上述拓扑依赖关系,以便在回退失败时快速定位根因。

4.5 组件拓扑的Helm Chart结构映射

在Helm部署中,上述组件拓扑对应以下Chart结构(以 grafana/loki-stack 为例):

loki-stack/
├── charts/
│   ├── loki/              # Loki StatefulSet + Service + ConfigMap
│   │   ├── templates/
│   │   │   ├── statefulset.yaml
│   │   │   ├── service.yaml
│   │   │   └── configmap.yaml
│   ├── promtail/          # Promtail DaemonSet + ConfigMap
│   │   ├── templates/
│   │   │   ├── daemonset.yaml
│   │   │   └── configmap.yaml
│   ├── grafana/           # Grafana Deployment + Service + DataSource
│   │   ├── templates/
│   │   │   ├── deployment.yaml
│   │   │   └── datasources.yaml
│   └── minio/             # MinIO Deployment + Service + PVC
│       ├── templates/
│       │   ├── deployment.yaml
│       │   └── pvc.yaml
├── values.yaml            # 全局配置参数
└── Chart.yaml             # Chart元数据

每个子Chart对应拓扑图中的一个核心组件,values.yaml 中的配置项(如 loki.config、promtail.config)直接控制组件行为。Helm快照将捕获这些配置的完整状态,为回退提供精确的恢复点。