写点什么

Thanos 架构剖析(四)数据存储和运维工具

作者:耳东@Erdong
  • 2021 年 12 月 15 日
  • 本文字数:3187 字

    阅读完需:约 10 分钟

Thanos 架构剖析(四)数据存储和运维工具

本文收录于 云原生监控高可用集群 Thanos 架构剖析 | 内容合集 ,如有需要请查阅。


Store 主要提供查询历史数据功能,当 Querier 组件调用 Stroe 接口,Stroe 再通过对象存储接口获取数据,并将存储数据转换成 Querier 所需的数据格式。

Thanos 数据存储

Thanos 数据存储组件通过 thanos store 命令(也称为 store Gateway)在对象存储桶中的历史数据上实现了 store API。它主要充当 API 网关,因此不需要大量的本地磁盘空间。Store 组件在启动时加入 Thanos 集群,并通过 gRPC 端口公布它可以访问的数据。它将所有远程数据块的少量信息保存在本地磁盘上,并使其与存储桶保持同步。在重启期间删除这些数据通常是安全的,但代价是增加了启动时间。


Thanos Store 组件简单的启动方式如下:


thanos store \    --data-dir        "/local/state/data/dir" \    --objstore.config-file "bucket.yml"
复制代码


bucket.yml 是访问对象存储的配置文件。


通常,存储在对象存储桶中的每个时序格式的监控数据块平均需要 6 MB 的本地磁盘空间,但是对于具有大标签集的高基数块,它甚至可以达到 30MB 甚至更多。 Store 中的数据是用于预先计算的索引,其中包括符号和发布的偏移量以及元数据 JSON。

基于时间分区

默认情况下,Thanos Store Gateway 查看 Store 对象中的所有数据,并根据查询的时间范围返回它。


Thanos Store 使用 -—min-time-—max-time 参数允许使用者根据当前时间的时间持续时间或者恒定时间来对 Thanos Store 进行分片。


例如设置 -—min-time=-6w-—max-time=-2w 将使 Thanos Store Gateway 的查询返回指标在距离现在过去 6 周到距离现在过去 2 周的时间范围内。


常量时间需要以 RFC3339 格式设置,比如 --min-time=2018-01-01T00:00:00Z--max-time=2019-01-01T23:59:59Z


Thanos Store Gateway 有时候不会立即获得新的块,因为时间分区部分是在异步块同步作业中完成的,默认情况下每 3 分钟完成一次。此外,一些对象存储在实现过程中提供了最终的读写一致性,这意味着 Thanos Store 可能不会立即创建和上传块。


在使用过程中建议 Thanos Sidecar 和其他 Thanos Store 网关有重叠的时间范围,这即使部分失败也并不影响最后的数据查询。Thanos Query 通过合并它们来处理重叠的时间序列。


另外,因为过滤是在块级别上完成的,所以 Thanos Store 可能仍然返回 -—min-time-—max-time之外的监控数据。

探针

Thanos Store 提供 2 个探针接口


/-/healthy 初始设置完成后立即启动,仅表示程序已经启动


/-/ready 在所有的引导完成后(例如初始的索引构建),并准备服务流量。


这两个接口的设计是符合云原生对应用的设计要求的,Kubernetes、Prometheus 都实现了这样的接口。

索引缓存

Thanos Store Gateway 支持一个索引缓存来加速 TSDB 块索引的并最终提高查询速度。支持三种类型的缓存:


  • 内存

  • memcached

  • Redis

使用内存进行索引缓存

默认情况下,内存索引缓存是启用的,它的最大大小可以通过参数--index-cache-size 来配置。


另外,还可以使用 --index-cache.config-file 来指定内存索引缓存的配置文件的,或者通过 --index-cache.config参数来放置 YAML 配置。


type: IN-MEMORYconfig:  max_size: 0  max_item_size: 0
复制代码


max_size: 缓存可以包含的总最大字节数,这个值使用字节单位指定(例如:250 MB)。max_item_size: 单个条目的最大大小,以字节为单位。该值应该用字节单位指定(例如:125 MB)。

使用 memcached 进行索引缓存

memcached 索引缓存允许使用 memcached 作为缓存后端。该缓存类型使用--index-cache.config-file 来指定内存索引缓存的配置文件的,或者通过 --index-cache.config参数来放置 YAML 配置。


type: MEMCACHEDconfig:  addresses: []  timeout: 0s  max_idle_connections: 0  max_async_concurrency: 0  max_async_buffer_size: 0  max_get_multi_concurrency: 0  max_item_size: 0  max_get_multi_batch_size: 0  dns_provider_update_interval: 0s  auto_discovery: false
复制代码

使用 Redis 进行索引缓存

Redis 索引缓存允许使用 Redis 作为缓存后端,--index-cache.config-file 来指定内存索引缓存的配置文件的,或者通过 --index-cache.config参数来放置 YAML 配置。


type: REDISconfig:  addr: ""  username: ""  password: ""  db: 0  dial_timeout: 5s  read_timeout: 3s  write_timeout: 3s  pool_size: 100  min_idle_conns: 10  idle_timeout: 5m0s  max_conn_age: 0s  max_get_multi_concurrency: 100  get_multi_batch_size: 100  max_set_multi_concurrency: 100  set_multi_batch_size: 100
复制代码


为了从对象存储中查询块内部的序列,存储网关必须从每个块索引中知道某些初始信息。为了实现这一点,在启动时,网关为每个块构建一个索引头,并将其存储在本地磁盘上;这样的索引头是通过下载原始块的索引的特定片段,存储在本地磁盘上,然后映射并由存储网关使用。

Thanos 运维工具

Thanos 使用 tools 提供了很多功能,官方表示大部分是用于开发和调试,在运维使用过程中可以使用这些工具来对 Thanos 进行一个处理,详细的工具列表如下:


  • Bucket Web

  • Bucket Verify

  • Bucket ls

  • Bucket inspect

  • Bucket replicate

  • Bucket downsample

  • Bucket mark

  • Bucket rewrite

  • Bucket retention

  • rule-check


打开对应工具的方式为 thanos tools <command> ,并且制定对应对象存储的验证方式,比如要查看 Bucket Web 可以使用 thanos tools web <flag> 命令。


我们来挑其中常用的几个来看一下

Bucket Web

Thanos Tools Bucket Web 以交互式 web UI 的形式检测对象存储的桶中的数据块。启动本地的 Web 服务以后将定期更新视图,这个刷新频率可以通过 --refresh=30m 参数设定,如果查看频率不高可以设置为 10 分钟,如果查看频率高可以设小一些,如果不设置,默认是 30 分钟刷新一次。通过这个工具提供的页面可以看到这么几项内容,


  • 桶里所有数据块的数量

  • 每个数据块的时间范围、是否降准、是否压缩等信息

  • 所有历史数据的开始时间


启动命令可以参考如下:


thanos tools bucket web \    --refresh=10m \    --http-address 0.0.0.0:10110 \    --objstore.config-file /thanos/conf/bucket_config.yml \
复制代码

Bucket Verify

Bucket Verify 用于验证指定桶内的块,并可选地进行修复。


执行命令的样例:thanos tools bucket verify --objstore.config-file="..."

Bucket ls

Bucket ls 用来查看当前桶中的所有数据块,会给出一个列表,使用 -o 参数制定输出格式为 JSON,-o 可选的参数有 'json', 'wide' or a custom template 。


执行命令的样例:thanos tools bucket ls -o json --objstore.config-file="..."

Bucket inspect

tools bucket inspect 使用 ASCII 表格式对对象存储的桶进行详细的检查。

Bucket replicate

Bucket replicate 用于将桶从一个对象存储复制到另一个对象存储。目前它只适用于 Thanos 产生的数据块 ,meta.json 必须有 Thanos 元数据 。


执行命令的样例:thanos tools bucket replicate --objstore.config-file="..." --objstore-to.config="..."

Bucket downsample

Bucket downsample 用于将对象存储桶中的数据块作为服务进行下采样。它在对象存储桶中的历史数据上实现 downsample API。这个组件没太用过,不太熟悉。


thanos tools bucket downsample --data-dir "/local/state/data/dir" --objstore.config-file "bucket.yml"

Bucket mark

Bucket mark 主要用来标记那些数据块可以删除或者这个数据块不需要进行压缩。


 thanos tools bucket mark --id="01FDERAC1KAPBEWKGATCJTE31X"  --marker=deletion-mark.json --details=DETAILS --objstore.config-file="/thanos/conf/bucket_config.yml"
复制代码


不压缩使用 no-compact-mark.json 标记。


0.22.0 及以前只支持deletion-mark.jsonno-compact-mark.json2 个标记。

Bucket Check


通过 Thanos check 可以检查和验证 Pormetheus Rules 是否正确,

发布于: 5 小时前阅读数: 12
用户头像

耳东@Erdong

关注

还未添加个人签名 2020.05.24 加入

主要研究分享运维技术,专注于监控、CICD、操作系统、云原生领域,公众号【耳东学堂】,知识星球同名,坚持原创,希望能和大家在运维路上结伴而行 邮箱:erdong@mail.erdong.site

评论

发布
暂无评论
Thanos 架构剖析(四)数据存储和运维工具