Thanos 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 参数。

扫描二维码关注公众号,回复: 14220462 查看本文章

安装


由于 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 进行访问:

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

猜你喜欢

转载自blog.csdn.net/qq_34556414/article/details/124958820
今日推荐