Thanos 0.42.4 介绍与选型指南
Thanos 0.42.4 介绍与选型指南:Prometheus 长期存储与全局视图方案的项目背景、六大组件架构、功能特性、适用限制及与 VictoriaMetrics/Mimir/Cortex 等同类方案量化对比。
Thanos 0.42.4 介绍与选型指南
目标:全面介绍 Prometheus 长期存储与全局视图方案 Thanos 的项目背景、组件架构、功能特性与选型对比,帮助读者判断是否引入 Thanos 以及与同类方案如何取舍。本文数据均来自官方渠道联网溯源(查询日期 2026-10-20)。
一、环境信息
本文为认知篇,仅联网溯源,未做本地实测。溯源渠道与查询日期如下:
- 项目仓库:https://github.com/thanos-io/thanos(查询日期 2026-10-20)
- 版本信息:GitHub Releases(releases.atom,查询日期 2026-10-20)
- 社区活跃度:shields.io 徽章数据(查询日期 2026-10-20)
- 项目治理:CNCF TOC 项目台账 https://github.com/cncf/toc(查询日期 2026-10-20)
- 官方文档:https://thanos.io
二、软件概述
2.1 项目定位
Thanos(以漫威角色"灭霸"命名)是一套基于对象存储构建的、高可用 Prometheus 长期存储与全局查询方案。它通过在多个 Prometheus 实例之上叠加一组无状态/有状态组件,解决原生 Prometheus 的三大痛点:
- 本地 TSDB 存储受单机磁盘容量限制,历史数据只能保留数天到数周;
- 多个独立 Prometheus 实例(分片/多副本)数据割裂,无法一站式查询;
- 原生方案缺乏跨实例去重、统一告警评估与长期数据降采样能力。
2.2 项目背景与治理
- 项目 2018 年由 Improbable 发起,采用 Apache-2.0 许可证;
- 2019 年 7 月 14 日被 CNCF 接受(来源:CNCF TOC projects.md,查询日期 2026-10-20),目前为 CNCF 孵化(Incubating)项目;
- 开发语言 Go(无 JVM 依赖,单二进制交付),架构上深度复用 Prometheus 组件库(promql、tsdb、scrape 等均直接 import 官方包)。
2.3 版本与社区活跃度(实查数据)
| 维度 | 数据 | 来源 |
|---|---|---|
| 最新稳定版 | v0.42.4(2026-07-30 发布) | GitHub releases.atom,查询日期 2026-10-20 |
| 版本节奏 | 平均 1~2 个月一个 minor 版本,patch 跟进及时 | 同上 |
| GitHub Stars | 约 14k | shields.io 徽章,查询日期 2026-10-20 |
| 构建工具链 | Go 1.26.5 | v0.42.4 二进制版本信息 |
| CNCF 治理 | 2019-07-14 进入 CNCF | CNCF TOC 台账 |
💡 说明:Thanos 采用多组件单二进制发布,同一个
thanos可执行文件通过子命令(sidecar/query/store/compact/rule/receive/query-frontend)扮演不同角色,升级时全组件统一换版本即可。
三、核心架构
3.1 总体设计:Prometheus 不动,外挂一套侧车体系
Thanos 的核心设计哲学是不修改 Prometheus 本身:每个 Prometheus 实例旁边部署一个 Sidecar,通过共享本地 TSDB 目录读取数据块、通过 Prometheus HTTP API 读取实时数据,再把历史数据块归档到对象存储(S3/GCS/Azure/OSS/COS/Swift/本地文件系统均支持)。查询侧由 Query 组件聚合所有数据源并按 external label 去重。
数据流可以概括为:
Prometheus(带 external_labels) → Sidecar → 对象存储(Bucket)
↓ Store Gateway(提供历史块查询)
告警/记录规则 → Ruler → Query(PromQL 全局查询、去重)
实时查询 → Query → Sidecar(近实时)
降采样/压缩 → Compactor(对 Bucket 里的块做降采样与保留清理)
流式接入 → Receive(远程写入无状态收数)→ 自有 TSDB → 上传 Bucket
查询缓存 → Query Frontend(缓存/拆分查询)
3.2 六大组件职责表
| 组件 | 角色 | 是否有状态 | 关键端口(默认) | 一句话职责 |
|---|---|---|---|---|
| Sidecar | 代理 | 否 | gRPC 10901 / HTTP 10902 | 连接本机 Prometheus:上传 TSDB 块到对象存储、代理近实时查询、热加载配置 |
| Query | 查询聚合 | 否 | gRPC 10904 / HTTP 10902 | 实现 StoreAPI 聚合,提供完整 PromQL 与 Web UI,跨数据源去重 |
| Store Gateway | 历史块网关 | 是(本地索引缓存) | gRPC 10901 / HTTP 10902 | 只读挂载对象存储中的历史块,按需拉取 chunk,支持索引缓存与筛选 |
| Compactor | 压实/降采样 | 是 | HTTP 10902 | 对桶内块做水平压实、5m/1h 降采样与保留期清理(单桶单实例) |
| Ruler | 规则评估 | 是 | gRPC 10902 / HTTP 10902 | 对全局视图执行告警/记录规则,把结果落成块上传对象存储 |
| Receive | 远程写入 | 是 | HTTP 10902 / 远程写 19291 | 接收 Prometheus remote_write,经 hashring 分片写入自有 TSDB 并上传 |
| Query Frontend | 查询网关 | 否 | HTTP 10902 | 查询结果缓存、按时间拆分与并发下推,加速大范围查询 |
💡 技术拓展:Thanos 的"数据源发现"有多种服务发现机制可选——
机制 原理 适用场景 静态配置(--endpoint / endpoint 配置文件) Query 直接写死各 StoreAPI 地址 组件少、拓扑稳定的环境 DNS 服务发现 目标写 DNS 名,周期解析 A 记录 K8s Headless Service / 内网 DNS StoreAPI 文件 SD(store.sd-files) 监视 JSON 文件变化动态加减端点 与配置管理系统联动 本文部署实践中采用静态 endpoint 配置文件方式,简单直观、无需额外设施。
3.3 数据存储模型:一切皆块(Block)
Thanos 把"长期存储"问题收敛为"管理一组不可变 TSDB 块":
- Prometheus 每 2 小时(默认)产出一个块,Sidecar 上传后即不可变;
- 每个块带 meta.json(来源、压缩级别、外部标签、时间范围);
- Compactor 按水位把小块压实成更大块,并生成 5m/1h 降采样块;
- 查询时按块 meta 与时间范围做裁剪,只拉需要的 chunk。
💡 技术拓展:监控长期存储的对象存储选型对比——
类型 代表 特点 适用场景 公有云对象存储 S3/GCS/OSS/COS/Azure 无限容量、高持久化 生产首选 自建对象存储 MinIO/Ceph RGW 兼容 S3 协议、自主可控 私有化环境 本地文件系统 FILESYSTEM 零依赖、共享目录即可 实验与小型部署 本文各部署篇实测采用 FILESYSTEM 后端打通全链路,生产环境建议替换为 S3 兼容后端。
四、功能特性
- 全局查询视图:Query 聚合 Sidecar/Store Gateway/Receive/Ruler/下级 Query 等全部 StoreAPI 端点,一个 PromQL 查所有环境;
- 副本去重:基于 external label(如 replica=A/B)与可插拔去重函数(penalty 等)对多副本数据自动去重;
- 无限历史:数据落在对象存储,保留期只受桶策略约束,本地 TSDB 可缩到数小时;
- 自动降采样:Compactor 自动产出 5m/1h 分辨率数据,大时间跨度查询自动命中低分辨率块;
- 全局告警:Ruler 可挂接全局规则,评估结果支持推送 Alertmanager 并落块存储;
- 水平扩展接入:Receive 以 hashring 分片接收 remote_write,支持多副本与租户;
- 查询加速:Query Frontend 提供查询结果缓存与时间拆分;Store Gateway 提供索引缓存(in-memory/memcached);
- 运维工具链:
thanos tools bucket子命令提供桶校验/巡检/重写/复制/清理等日常运维能力,tools rules-check提供规则文件校验; - 兼容性:完整兼容 PromQL 与 Prometheus HTTP API(查询接口可无缝对接 Grafana),支持 Prometheus 2.x/3.x 作为数据源。
五、快速开始(官方路径)
Thanos 官方《Getting Started》推荐的最快路径是使用仓库内置的 Compose 示例(监控栈一键拉起 Prometheus + Thanos 全组件 + Grafana),命令形态如下(来源:官方文档 https://thanos.io/tip/thanos/getting-started.md/ ,查询日期 2026-10-20):
git clone https://github.com/thanos-io/thanos.git
cd thanos/tutorials/getting-started
docker compose up -d
💡 说明:该示例依赖 Docker Compose。若希望以二进制 + systemd 方式在 Ubuntu 服务器上从零部署 Thanos 全组件,请直接阅读本专栏《Thanos 0.42.4 部署指南》与《Ubuntu 22.04 安装 Thanos 0.42.4 指南》;Thanos 依赖的 Prometheus 服务端安装可参考《Ubuntu 24.04 安装 Prometheus 3.x》(点击跳转)。
六、适用场景与限制
6.1 适合引入 Thanos 的场景
- Prometheus 集群数量多(多机房/多业务线/多套 K8s),需要统一查询入口;
- 监控数据要求保留 3 个月以上,且不能接受采样丢失(需要降采样分层);
- 需要跨副本高可用查询与自动去重;
- 希望告警规则独立于数据源生命周期(Ruler + 对象存储)。
6.2 限制与代价
- 组件数量多,引入后至少新增 4~6 个服务,运维复杂度显著上升;
- Compactor 对同一个桶必须单实例运行(并发压实会造成数据重叠冲突);
- Sidecar 与 Prometheus 必须同机部署(共享 TSDB 目录),限制了弹性调度;
- 对象存储 API 调用量与查询延迟直接相关,需要配好 Store Gateway 缓存;
- 版本升级需全组件同步(官方建议同集群内组件版本保持一致)。
七、同类选型对比
Prometheus 长期存储/全局视图方案的主流候选如下(社区数据查询日期 2026-10-20):
| 方案 | 形态 | 存储引擎 | 全局视图 | 多副本去重 | 降采样 | 运维复杂度 | 社区活跃度 |
|---|---|---|---|---|---|---|---|
| Thanos | 外挂多组件 | 复用 Prometheus TSDB 块 + 对象存储 | ✅ Query 聚合 | ✅ external label | ✅ 5m/1h | 中高 | CNCF 孵化,~14k stars |
| VictoriaMetrics | 单进程集群版 | 自研 LSM(vmstorage) | ✅ 原生 | ✅ 原生 | ✅ 自动 | 低(组件少) | ~14k stars |
| Grafana Mimir | 微服务(可单二进制) | 自研块 + 对象存储 | ✅ 原生 | ✅ 原生 | ✅ 原生 | 中高 | ~4k+ stars |
| Cortex | 微服务(Mimir 上游) | 自研块 + 对象存储 | ✅ 原生 | ✅ 原生 | ✅ 原生 | 高 | 维护趋缓,重心转 Mimir |
| M3 | 微服务 | 自研(M3DB) | ✅ | ✅ | ✅ | 高 | 活跃度下降 |
| Graphite | 传统三件套 | Whisper 文件 | ⚠️ 聚合需 cluster | ❌ | ⚠️ 轮询归档 | 中 | 老牌,迭代缓慢 |
| InfluxDB | 单机/集群 | TSM/IOx | ⚠️ 需联邦 | ❌ | ✅ | 低~中 | 商业主导 |
量化维度说明:Stars 数据取自 shields.io 徽章(查询日期 2026-10-20);"运维复杂度"按部署组件数与状态组件占比综合评估;Mimir 数据取自其官方仓库。
选型建议:
- 已有大量原生 Prometheus、希望"渐进式"获得长期存储与全局查询 → Thanos(不改 Prometheus、可按需启用组件,与现有生态零迁移成本);
- 希望一套组件解决所有问题、追求更低资源开销与更简单运维 → VictoriaMetrics(vmagent/vminsert/vmselect/vmstorage,部署组件比 Thanos 少);
- 大规模多租户 SaaS 化监控、需要严格隔离 → Grafana Mimir;
- 历史遗留 Whisper 体系且无迁移动力 → Graphite 维持现状;
- 已深度投入 InfluxDB 生态 → InfluxDB 继续使用,新监控体系不建议。
💡 提示:Thanos 与 VictoriaMetrics 并非互斥——不少团队用 vmagent 抓取 + VictoriaMetrics 存储,同时保留 Thanos 管理既有 Prometheus 集群,按业务分域选型。
八、参考链接
- 官方文档:https://thanos.io
- 项目仓库:https://github.com/thanos-io/thanos
- 发布页:https://github.com/thanos-io/thanos/releases
- CNCF 项目页:https://www.cncf.io/projects/thanos/
- 组件架构详解:https://thanos.io/tip/thanos/Architecture.md/
- 存储配置说明:https://thanos.io/tip/thanos/storage.md/
- 本专栏部署篇:《Thanos 0.42.4 部署指南》(点击跳转)
- 本专栏命令篇:《Thanos 0.42.4 常用 CLI 命令与工具详解》(点击跳转)
- 站内相关:《Prometheus 3.15.0 介绍与选型指南》(点击跳转)