thanos是prometheus的高可用解决方案之一,thanos与prometheus无缝集成,并提高了一些高级特性,满足了长期存储 + 无限拓展 + 全局视图 + 无侵入性的需求
一、prometheus本地存储
Prometheus 的本地存储被称为 Prometheus TSDB。TSDB 的设计有两个核心:block 和 WAL,而 block 又包含 chunk、index、meta.json、tombstones。
Prometheus保存块数据的目录结构如下所示:
./data
|- 01BKGV7JBM69T2G1BGBGM6KB12 # 块
|- meta.json # 元数据
|- wal # 写入日志
|- 000002
|- 000001
|- 01BKGTZQ1SYQJTR4PB43C8PD98 # 块
|- meta.json #元数据
|- index # 索引文件
|- chunks # 样本数据
|- 000001
|- tombstones # 逻辑数据
|- 01BKGTZQ1HHWHV8FBJXW1Y3W0K
|- meta.json
|- wal
|-000001
prometheus关键参数
启动参数 默认值 含义 --storage.tsdb.path /data 数据存储路径 --storage.tsdb.retention.time 15d 样本数据在存储中保存的时间。超过该时间限制的数据就会被删除。 --storage.tsdb.retention.size 0 每个块的最大字节数(不包括 wal 文件)。如果超过限制,最早的样本数据会被优先删除。支持的单位有 KB, MB, GB, PB,例如:“512MB”。该参数只是试验性的,可能会在未来的版本中被移除。 --storage.tsdb.retention 该参数从 2.7 版本开始已经被弃用,使用 --storage.tsdb.retention.time 参数替代
主要关注 storage.tsdb.retention.time ,这个值决定了prometheus在本地的存储时间。
二、远端存储thanos
一般我们会采用prometheus本地存储存个1-2周,其他的都用thanos远程存储到oss上,这样可以减轻服务器的磁盘容量问题。
下面我们来讲下thanos的一些原理:
Thanos Sidecar:连接 Prometheus,将其数据提供给 Thanos Query 查询,并且/或者将其上传到对象存储,以供长期存储
Thanos Query:实现了 Prometheus API,提供全局查询视图,将来StoreAPI提供的数据进行聚合最终返回给查询数据的client(如grafana)
Thanos Store Gateway:将对象存储的数据暴露给 Thanos Query 去查询。
Thanos Ruler:对监控数据进行评估和告警,还可以计算出新的监控数据,将这些新数据提供给 Thanos Query 查询并且/或者上传到对象存储,以供长期存储。
Thanos Compact:将对象存储中的数据进行压缩和降低采样率,加速大时间区间监控数据查询的速度
Thanos Receiver:从 Prometheus 的远程写入 WAL 接收数据,将其公开和/或上传到云存储。
重点:
存储:thanos会监控proemtheus的数据目录,只有有数据落地,thanos就会按照参数store --sync-block-duration=5m,也就是每5分钟去检查下prometheus的磁盘信息,检查到有新增后,就会将数据传到oss上。 (proemtheus的磁盘落地 --storage.tsdb.min-block-duration=2h 好像是通过这个参数控制的,我懒的查了。反正肯定有。意思就是采集到的数据全放入到内存中,2个小时落地一次)。
查询:那问题来了,当用户向thanos查询数据时,是从oss读呢 还是从proemtheus本地读呢?
答:如果prometheus本地数据还在,thanos会从本地读,如果prometheus本地没有数据,则会从oss上读。
最近遇到了一个问题,就是prometheus本地有数据,但是thanos从oss上读。
错误:rpc error: code = Aborted desc = fetch series for block 01HN292XEAJW454C0EM1HX64DY: preload chunks: read range for 0: allocate chunk bytes: pool exhausted" msg="returning partial response"
https://github.com/thanos-io/thanos/issues/3720
有问题请加博主微信进行沟通!
全部评论