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,可以根据以下维度去划分 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 进行访问:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值