2025-3-20 thanos架构

Thanos 架构 #

Thanos 是一个开源的扩展工具,它能够增强 Prometheus 的功能,特别是在多集群、跨区域的长时间存储和查询方面。Thanos 架构设计旨在为 Prometheus 提供长期存储、高可用性、跨集群数据聚合、跨区域查询等能力,同时保持 Prometheus 的简洁性和易用性。

Thanos 的架构是模块化的,包含多个组件,每个组件在 Thanos 系统中扮演不同的角色。以下是 Thanos 主要组件的介绍及其架构设计。

Thanos 主要组件 #

  1. Thanos Sidecar:
    • 功能:Thanos Sidecar 运行在每个 Prometheus 实例旁边,作为 Prometheus 的代理。它的主要功能是将 Prometheus 中的数据存储(本地数据)上传到外部对象存储(如 S3、GCS 等)。此外,Thanos Sidecar 还负责向 Thanos 查询组件提供查询接口,并实现跨 Prometheus 实例的查询和聚合。
    • 作用:通过将数据存储到对象存储(如 S3)来实现 Prometheus 的持久化存储,同时也使得 Thanos 可以提供跨集群的数据聚合和查询功能。
  2. Thanos Store Gateway:
    • 功能:Thanos Store Gateway 负责从对象存储中读取长期存储的数据(例如,S3、GCS 等)并提供查询接口。它可以直接从存储中读取数据并将数据返回给查询组件。
    • 作用:为跨集群、跨时间的数据查询提供支持,允许查询 Prometheus 集群之外的数据。
  3. Thanos Query:
    • 功能:Thanos Query 是一个查询层组件,它从多个 Thanos Store Gateway 和 Prometheus 实例(通过 Thanos Sidecar)拉取数据,合并结果并提供查询接口。它支持 PromQL 查询语言,可以跨多个 Prometheus 实例进行聚合查询。
    • 作用:提供统一的查询入口,可以进行跨集群查询,支持全局查询和聚合查询。通过 Thanos Query,用户能够查询所有 Prometheus 集群的数据,并且查询结果能实时聚合。
  4. Thanos Compactor:
    • 功能:Thanos Compactor 负责定期清理和压缩对象存储中的历史数据。它优化存储空间,删除过期的时间序列,压缩时间序列数据以提高存储效率。
    • 作用:压缩和归档数据,以减少存储空间占用,并保持数据的长期可用性。
  5. Thanos Ruler:
    • 功能:Thanos Ruler 是 Prometheus 的规则引擎组件,它支持基于 Prometheus 查询语言(PromQL)设置告警规则和录制规则。它能够使用存储中的数据来执行规则并触发告警。
    • 作用:为 Thanos 提供告警规则支持,执行长时间范围的规则计算,并将告警发送到 Alertmanager。

Thanos 系统架构图 #

graph TD
    subgraph Data_Scraping
        direction TB
        A[Prometheus Targets]
    end

    subgraph Thanos_Cluster
        direction TB
        B[Thanos Sidecar]
        C[Thanos Store Gateway]
        D[Thanos Query]
        E[Thanos Ruler]
        F[Thanos Compactor]
    end

    subgraph Long_Term_Storage
        direction TB
        G[S3/GCS/Cloud Storage]
    end

    A --> B
    B --> C
    B --> D
    C --> G
    D --> G
    D --> A
    E --> G
    F --> G
    B --> E

组件之间的交互: #

  1. Prometheus Targets:收集时序数据,发送到 Prometheus 进行存储。
  2. Thanos Sidecar:
    • 与 Prometheus 紧密集成,负责将 Prometheus 存储的数据上传到外部对象存储(如 S3)。
    • 提供与 Thanos Query 和 Thanos Ruler 的交互接口。
  3. Thanos Store Gateway:
    • 从长期存储(例如 S3)中获取历史数据,并为 Thanos Query 提供查询接口。
    • 存储长期的数据,在 Prometheus 的时间范围外提供可查询的数据。
  4. Thanos Query:
    • 提供统一的查询入口,允许跨多个 Prometheus 集群执行查询。
    • 从 Thanos Store Gateway、Prometheus 实例中拉取数据并返回查询结果。
  5. Thanos Ruler:
    • 基于存储的数据执行 Prometheus 的告警规则和录制规则。
    • 通过规则引擎提供跨集群的告警和录制计算。
  6. Thanos Compactor:
    • 定期清理和压缩存储的数据,减小存储占用。
    • 优化历史数据存储,提高存储效率。

Thanos 优缺点 #

优点: #

  1. 跨集群查询:Thanos 可以跨多个 Prometheus 集群进行查询,支持集中式监控。
  2. 长时间存储:与对象存储(如 S3)集成,提供几乎无限的时序数据存储能力。
  3. 高可用性:通过 Thanos Sidecar、Store Gateway 和 Query 组件的分布式设计,提供高可用性。
  4. 与 Prometheus 无缝集成:Thanos 能够与现有的 Prometheus 集群轻松集成,并增强 Prometheus 的能力。
  5. 告警和规则:支持 Prometheus 的规则引擎,能够通过 Thanos Ruler 执行告警和录制规则。

缺点: #

  1. 部署复杂性:Thanos 的组件较多,部署和管理相对复杂,尤其是在大规模环境下。
  2. 性能瓶颈:虽然 Thanos 能够跨多个 Prometheus 实例进行查询,但在某些高负载情况下,查询性能可能会受到影响,尤其是在大量历史数据查询时。
  3. 存储成本:将所有历史数据存储在对象存储中,可能会增加存储成本。

结论 #

Thanos 是一个极其强大的工具,能够有效地扩展 Prometheus 的功能,特别是在跨集群、长时间存储和查询方面。通过 Thanos,Prometheus 可以具备更强的扩展性、跨地域数据聚合能力以及长时间的时序数据存储能力。这使得 Thanos 成为在大规模、多集群监控环境中非常有价值的工具。