AICon全球人工智能与机器学习技术大会周四开幕,点击查看完整日程>> 了解详情
写点什么

Thanos:实现支持无限数据存储的可伸缩 Prometheus

  • 2018 年 6 月 12 日
  • 本文字数:1843 字

    阅读完需:约 6 分钟

Improbable 团队开源了Thanos,一组通过跨集群联合、跨集群无限存储和全局查询为Prometheus 增加高可用性的组件。

Improbable 部署了一个大型的 Prometheus 来监控他们的几十个 Kubernetes 集群。默认的 Prometheus 设置在查询历史数据、通过单个 API 调用进行跨分布式 Prometheus 服务器查询以及合并多个 Prometheus 数据方面存在困难。

高可用警报联合部署是Prometheus 现有的高可用特性。在联合部署中,全局Prometheus 服务器可以在其他Prometheus 服务器上聚合数据,这些服务区可能分布在多个数据中心。每台服务器只能看到一部分度量指标。为了处理每个数据中心的负载,可以在一个数据中心内运行多台Prometheus 服务器,并进行水平分片。在分片设置中,从服务器获取数据的子集,并由主服务器对其进行聚合。在查询特定的服务器时,需要查询拼凑数据的特定从服务器。默认情况下,Prometheus 存储15 天的时间序列数据。为了无限期存储数据,Prometheus 提供了一个远程端点,用于将数据写入另一个数据存储区。不过,在使用这种方法时,数据除重是个问题。其他解决方案(如 Cortex )提供了一个远程写入端点和兼容的查询 API,实现可伸缩的长期存储。

Thanos 在每一台 Prometheus 服务器上运行一个边车组件,并提供了一个用于处理 PromQL 查询的中央 Querier 组件,因而在所有服务器之间引入了一个中央查询层。这些组件构成了一个 Thanos 部署,并基于 memberlist gossip 协议实现组件间通信。Querier 可以水平扩展,因为它是无状态的,并且可充当智能逆向代理,将请求转发给边车,汇总它们的响应,并对 PromQL 查询进行评估。

Thanos 通过使用后端的对象存储来解决数据保留问题。Prometheus 在将数据写入磁盘时,边车的 StoreAPI 组件会检测到,并将数据上传到对象存储器中。Store 组件还可以作为一个基于 gossip 协议的检索代理,让 Querier 组件与它进行通信以获取数据。

InfoQ 采访了 Improbable 的软件工程师 Bartłomiej Płotka,了解了更多关于 Thanos 如何执行查询的细节:

在 Thanos 中,查询的评估只在一个地方发生,也就是通过 HTTP 监听 PromQL 查询的地方。来自 Prometheus 2.2.1 的 PromQL 引擎用于评估查询,预测需要获取数据的时间序列和时间范围。我们使用基本的过滤器(基于时间范围和外部标签)过滤掉不会提供所需数据的 StoreAPI(叶子),然后执行剩余的查询。然后将来自不同来源的数据按照时间顺序追加的方式合并在一起。

Querier 组件可以基于用户规模自动调整密度(例如 5 分钟、1 小时或 24 小时)。Thanos 如何确定哪些 API 服务器持有所需的数据?Płotka 解释说:

StoreAPI 会对外公布外部标签及其持有数据的时间范围,所以我们可以对此进行基本过滤。但是,如果没有在查询中指定这些条件,Querier 就会同时查询所有的 StoreAPI 服务器。此外,边车和存储的数据之间可能会有重复的结果,这种情况可能不容易避免。

StoreAPI 组件了解 Prometheus 的数据格式,因此它可以优化查询执行计划,并缓存数据块的特定索引,以对用户查询做出足够快的响应,避免了缓存大量数据的必要。在使用 Thanos 边车的 Prometheus 高可用设置中,是否会有多个边车试图将相同的数据块上传到对象存储的问题?Płotka 回应道:

我们通过为所有 Prometheus+ 边车实例提供唯一的外部标签来解决这个问题。为了表明所有副本都存储相同的数据,它们只有标签是不一样的。例如:

First:

“cluster”: “prod1”

“replica”: “0”

Second:

“cluster”:“prod1”

“replica”: “1”

由于标签集是唯一的,所以不会有什么问题。不过,如果指定了副本,查询层可以在运行时通过“replica”标签进行除重操作。

图片来源: https://improbable.io/games/blog/thanos-prometheus-at-scale

Thanos 还提供了时间序列数据的压缩和降采样(downsample)存储。Prometheus 提供了一个内置的压缩​​模型,现有较小的数据块被重写为较大的数据块,并进行结构重组以提高查询性能。Thanos 在Compactor 组件(作为批次作业运行)中使用了相同的机制,并压缩对象存储数据。Płotka 说,Compactor 也对数据进行降采样,“目前降采样时间间隔不可配置,不过我们选择了一些合理的时间间隔——5 分钟和1 小时”。压缩也是其他时间序列数据库(如 InfluxDB OpenTSDB )的常见功能。

Thanos 采用 Go 开发,托管在 Github 上。我们可以继续在可视化工具(如 Grafana)上使用 Thanos,就像现有的 Prometheus 插件一样,因为 API 是相同的

查看英文原文 Thanos - a Scalable Prometheus With Unlimited Storage

2018 年 6 月 12 日 15:215777
用户头像

发布了 731 篇内容, 共 383.7 次阅读, 收获喜欢 1903 次。

关注

评论

发布
暂无评论
发现更多内容

看完老板哭着让我留下来!带你彻底搞懂Android启动速度优化!Android篇

欢喜学安卓

android 程序员 面试 移动开发

如何通过NGINX的log日志来分析网站的访问情况,试试这些命令

我爱娃哈哈😍

nginx Shell

AQS设计思想与重要字段详解

程序员小毕

Java 源码 jdk 并发编程 AQS

掌上警务,二维码一键报警定位系统

t13823115967

二维码定位报警系统开发

浅析整洁架构之道(二) 初步了解The Clean Architecture

微言码道

DDD 领域驱动 The Clean Architecture Robert C. Martin

深入理解Nginx的四级指针

赖猫

c++ nginx Linux Nginx源码

零基础也能看得懂!Android面试心得必备技能储备详解,Android面试题及解析

欢喜学安卓

android 程序员 面试 移动开发

大数据指标分析思考

andy

智慧城市智能化建设,平安社区平台建设综合解决方案

t13823115967

智慧城市

溯源反制之MySQL蜜罐研究

Java架构师迁哥

天天CRUD,被领导怼,我是如何从小公司菜鸡到阿里P8架构师?,首次分享Java程序员黄金五年进阶心得

Java架构之路

Java 程序员 架构 面试 编程语言

泪目!美团点评APP在移动网络性能优化的实践,附赠课程+题库

欢喜学安卓

android 程序员 面试 移动开发

四万字干货 | 《高博士区块链观察18讲》文字稿,带你系统了解区块链

Geek_987812

区块链

2021 第七季 28天写作训练 测试

将军-技术演讲力教练

大数据应用及其价值

andy

架构师训练营大作业(一)

我是谁

架构师训练营第 1 期

吴桐/数字化的下一个十年,你可能不会更幸福

Geek_987812

数字化时代

量子通信触达消费者

Geek_987812

量子通信

系统高可用分析

andy

一文汇总数据库基础知识点!(建议收藏)

Java鱼仔

2020年无人场景市场趋势洞察

IoT云工坊

人工智能 物联网 智慧照明 节能管理 安防报警

python 技术面试没过,居然是没有用 pytest 测试框架

和牛

Python 测试 测试框架 pytest

架构师第7周作业

Geek_xq

惊艳!阿里人用29篇讲明白了多线程与高并发+设计模式,惊呆了!

996小迁

Java 面试 设计模式 多线程 高并发

架构师训练营W12作业

Geek_f06ede

CSS05 - 常用的高级选择器

桃夭十一里

html/css

CSS06 - 标签的显示模式与转换

桃夭十一里

html/css

MySQL不会丢失数据的秘密,就藏在它的 7种日志里

程序员内点事

MySQL

测开之函数进阶· 第8篇《多个装饰器装饰同一个函数,三个内置的装饰器》

清菡

测试开发

Openresty协程调度对比Go协程调度

行如风

高并发 协程 openresty Go scheduler

阿里巴巴Java架构师70W年薪招聘需求,已拿Offer经验分享

Java架构追梦

Java 学习 阿里巴巴 架构 面试

数据cool谈(第2期)寻找下一代企业级数据库

数据cool谈(第2期)寻找下一代企业级数据库

Thanos:实现支持无限数据存储的可伸缩Prometheus-InfoQ