Thanos Compactor 组件

网友投稿 384 2022-09-13

Thanos Compactor 组件

compact主要是对对象存储里面大时间查询的优化,因为对象存储当中数据可以存放很久,时间范围可以拉的很长,可以查几个月前的数据,这样拉取的数据量就非常大了,通常就会超时或者非常长的时间才能查询出来。

compact其实就是读取对象存储当中的数据,对它做些压缩,降采样(它有一份原始的数据,他还会增加采样间隔更长的数据,原始数据可能10s,15s间隔一次的采集,它可能就降低为5m一次,或者1h一次,这样数据量就小很多,在查询大时间范围的时候就选择采样时间更长的数据,这样拉出来的数据就会小很多)(因为是看历史趋势,不是查看细节,所以不需要那么密集的数据点),

现在历史监控数据已经上传到对象存储中去了,但是由于监控数据量非常庞大,所以一般情况下我们会去安装一个 Thanos 的 Compactor 组件,用来将对象存储中的数据进行压缩。

Compactor 组件只与对象存储交互,是唯一拥有删除对象存储数据权限的组件,主要有两个作用:压缩 block(将多个 block 合并成一个)、降采样(可禁用,5m/1h 采样数据)。可设置数据保留时长,原始数据、5m/1h 降采样数据可分别设置保留时长。

降采样

Compactor 用于定时对远端对象存储中的历史数据块进行下采样,Compactor 会将小的存储块合并为大的存储块,提升在做大时间跨度查询时的速度。

下采样有三个主要的配置参数:(可以配置保留多少天)

​​--retention.resolution-raw​​(单位:d,默认 0d)​​--retention.resolution-5m​​(单位:d,默认 0d)​​--retention.resolution-1h​​(单位:d,默认 0d)

当开启 ​​raw​​ 之后,原有的历史数据会以该项所配置的时间长度保留于远端对象存储中,超过该时间的数据会被清理。

​​5m​​ 开启后会为每个存储时长大于 40 小时的块中开辟新的存储区域,将历史数据以 5 分钟为精度进行下采样,以该项所配置的时间长度存储于远端对象存储中。

​​1h​​ 开启后会为每个存储时长大于 10 天的块中开辟新的存储区域,将历史数据以 1 小时为间隔进行下采样,以该项所配置的时间长度存储于远端对象存储中。

下采样的实现方式是以外部标签为分组,以数据块为单位,以采样精度为取值区间在原有的数据块中取指标值保存到新建的下采样数据块中。

这三种采样的数据都是独立存储,相当于存了三份数据,因此并不能起到压缩存储空间的作用。

默认情况下值为 0d 表示永久保留下采样数据。如果需要关闭下采样,也可以在启动时附加 ​​--debug.disable-downsampling​​ 参数。

安装

由于 Compactor 的设计是非并发安全的,因此只能单例部署,一个 Bucket 也只允许运行一个 Compactor,每一个 Store Gateway 都需要配置一个 Bucket 桶,而一个 Bucket 只允许一个

结算方式所在区域所属业务基础设施层级单指标的横向拆分

Compactor 组件的部署和 Store 非常类似,指定对象存储的配置文件即可(只和对象存储做对接的),如下所示的资源清单文件:

# thanos-compactor.yamlapiVersion: apps/v1kind: StatefulSetmetadata: name: thanos-compactor namespace: kube-mon labels: app: thanos-compactorspec: replicas: 1 selector: matchLabels: app: thanos-compactor serviceName: thanos-compactor template: metadata: labels: app: thanos-compactor spec: containers: - name: thanos image: thanosio/thanos:v0.25.1 args: - "compact" - "--log.level=debug" - "--data-dir=/data" - "--objstore.config-file=/etc/secret/thanos.yaml" - "--wait" ports: - name: containerPort: 10902 livenessProbe: port: 10902 path: /-/healthy initialDelaySeconds: 10 readinessProbe: port: 10902 path: /-/ready initialDelaySeconds: 15 volumeMounts: - name: object-storage-config mountPath: /etc/secret readOnly: false volumes: - name: object-storage-config secret: secretName: thanos-objectstorage---apiVersion: v1kind: Servicemetadata: name: thanos-compactor namespace: kube-mon labels: app: thanos-compactorspec: ports: - port: 10902 targetPort: name: selector: app: thanos-compactor type: NodePort

最重要的还是提供对象存储的配置文件,然后直接创建上面的资源清单文件:

☸ ➜ kubectl apply -f ➜ kubectl get pods -n kube-mon -l app=thanos-compactorNAME READY STATUS RESTARTS AGEthanos-compactor-0 1/1 Running 0 68s☸ ➜ kubectl get svc -n kube-mon -l app=thanos-compactorNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEthanos-compactor NodePort 10.97.151.170 10902:32051/TCP 71s

Compactor 同样也提供了一个 Web 界面,这里我们可以通过 NodePort 进行访问:

在页面中还可以对存储块进行管理,在右下角,我们可以标记删除一个存储块,也可以选择不对其进行降采样。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Kubernetes 服务发现 监控APIServer
下一篇:广告情报局:好文案,要有场景感!
相关文章

 发表评论

暂时没有评论,来抢沙发吧~