跳到主要内容

Compactor 组件

现在历史监控数据已经上传到对象存储中去了,但是由于监控数据量非常庞大,所以一般情况下我们会去安装一个 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,可以根据以下维度去划分 Bucket:

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

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

# thanos-compactor.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: thanos-compactor
namespace: kube-mon
labels:
app: thanos-compactor
spec:
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: http
containerPort: 10902
livenessProbe:
httpGet:
port: 10902
path: /-/healthy
initialDelaySeconds: 10
readinessProbe:
httpGet:
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: v1
kind: Service
metadata:
name: thanos-compactor
namespace: kube-mon
labels:
app: thanos-compactor
spec:
ports:
- port: 10902
targetPort: http
name: http
selector:
app: thanos-compactor
type: NodePort

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

☸ ➜ kubectl apply -f https://p8s.io/docs/thanos/manifests/thanos-compactor.yaml
☸ ➜ kubectl get pods -n kube-mon -l app=thanos-compactor
NAME READY STATUS RESTARTS AGE
thanos-compactor-0 1/1 Running 0 68s
☸ ➜ kubectl get svc -n kube-mon -l app=thanos-compactor
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
thanos-compactor NodePort 10.97.151.170 <none> 10902:32051/TCP 71s

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

thanos-compactor

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

thanos-compactor