暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Prometheus系列7 - thanos组件详解之querier

栋总侃技术 2021-09-06
4055

在上一节,我们详细介绍了thanos组件中的receiver和store。这一节我们将带来querier和compact的讲解。

querier

在thanos中,querier是一个聚合查询的指标数据、并对指标数据进行去重等操作的一个组件。

在querier的上游可以是例如Grafana图形展示的工具等。而querier的存在让这些展示指标的前端页面无需关注数据的来源有哪些,只需要要将查询的条件告知querier,由querier去prometheus、sidecar、receive、对象存储等多个数据源去获取数据。

我们首先看下querier的启动参赛:

query--query.auto-downsampling--grpc-address=0.0.0.0:10901--http-address=0.0.0.0:9090--query.partial-response--query.replica-label=receive_replica--store=dnssrv+_grpc._tcp.thanos-store.thanos.svc.cluster.local         --store=dnssrv+_grpc._tcp.thanos-receive.thanos.svc.cluster.local
复制

参数详解

  • query.auto-downsampling - 查询数据的最大分辨率 0则按照采样的数据分辨率。

  • grpc-address - grpc服务的端口

  • http-address - http服务的端口

  • query.partial-response - 该值默认为true则通过该querier不再查询到数据

  • query.replica-label - 查询时忽略的label,返回的指标数据不再包含以上label

  • store - 查询的数据源

query.replica-label

大家可以回忆一下上一节启动receive时有指定一个label参数:

--label=receive_replica="$(NAME)"
复制

其含义是通过该receive副本收集到的指标都会增加一个label标签,例如 receiver-0 副本采集到的一条指标如下:

node_disk_io{instance="10.11.2.72:39100", replica-label="receiver-0"}
复制

而通过 receiver-1 副本采集到的一条指标如下:

node_disk_io_total{instance="10.11.2.72:39100", replica-label="receiver-1"}
复制

这样通过公式查询到的指标再进行运算是无法计算出结果的,因为通过querier获取到的指标认为是不同的指标。

node_disk_io{instance=~"$instance"} / node_disk_io_total{instance=~"$instance"}
复制

当通过 quey 启动的时候指定 query.replica-label=receive_replica 时,从 query 获取到的指标自动会去掉receive_replica标签

node_disk_io{instance="10.11.2.72:39100"}node_disk_io_total{instance="10.11.2.72:39100"}
复制

这样就可以进行指标的运算了。

在 kubernetes 中启动query的yaml模版如下:

apiVersion: v1kind: Servicemetadata:  name: thanos-query  namespace: thanos  labels:    app.kubernetes.io/name: thanos-queryspec:  type: NodePort  ports:  - name: grpc    port: 10901    targetPort: grpc  - name: http    port: 9090    targetPort: http    nodePort: 30911  selector:    app.kubernetes.io/name: thanos-query---apiVersion: apps/v1kind: Deploymentmetadata:  name: thanos-query  namespace: thanos  labels:    app.kubernetes.io/name: thanos-queryspec:  replicas: 3  selector:    matchLabels:      app.kubernetes.io/name: thanos-query  template:    metadata:      labels:        app.kubernetes.io/name: thanos-query    spec:      affinity:        podAntiAffinity:          preferredDuringSchedulingIgnoredDuringExecution:          - podAffinityTerm:              labelSelector:                matchExpressions:                - key: app.kubernetes.io/name                  operator: In                  values:                  - thanos-query              topologyKey: kubernetes.io/hostname            weight: 100      containers:      - args:        - query        - --log.level=debug        - --query.auto-downsampling        - --grpc-address=0.0.0.0:10901        - --http-address=0.0.0.0:9090        - --query.partial-response        - --query.replica-label=receive_replica        - --store=10.6.118.110:32766   # sidecar        - --store=10.6.209.32:31574    # sidecar        - --store=10.6.118.121:32766   # sidecar        - --store=dnssrv+_grpc._tcp.thanos-store.thanos.svc.cluster.local           # store        - --store=dnssrv+_grpc._tcp.thanos-receive.thanos.svc.cluster.local        image: thanos.io/thanos:v0.22.0        livenessProbe:          failureThreshold: 4          httpGet:            path: /-/healthy            port: 9090            scheme: HTTP          periodSeconds: 30        name: thanos-query        ports:        - containerPort: 10901          name: grpc        - containerPort: 9090          name: http        readinessProbe:          failureThreshold: 20          httpGet:            path: /-/ready            port: 9090            scheme: HTTP          periodSeconds: 5        terminationMessagePolicy: FallbackToLogsOnError      terminationGracePeriodSeconds: 120
复制

其中我们可以看到制定的store和receive参数如下:

--store=dnssrv+_grpc._tcp.thanos-store.thanos.svc.cluster.local--store=dnssrv+_grpc._tcp.thanos-receive.thanos.svc.cluster.local
复制

这个与之前定义 store 和 receive 定义的 service 是相对应的,通过该定义可以获取到该 service 所有对应的 endpoint

dnssrv+_{protocal}._tcp.{service}.thanos.svc.cluster.local
复制

compact

compact是thanos中相对对立的一个组件,仅与对象存储存在交互。对对象存储中的指标数据进行压缩。

compact的启动参数如下:

compact--wait--wait-interval=5m--objstore.config-file=/etc/thanos/objectstorage.yaml--data-dir=/var/thanos/compact--retention.resolution-raw=90d--retention.resolution-5m=180d--retention.resolution-1h=360d
复制

参数详解

  • wait - 表示持续运行,类似cronjob,同时还可以指定运行的周期时间

  • wait-interval - 指定运行的周期时间,默认5分钟

  • objstore.config-file - 对象存储的配置文件路径

  • data-dir - 缓存文件路径

  • retention.resolution-raw - 保留原始样本数据的最长时间

  • retention.resolution-5m - 采样为5分钟数据保留的最长时间

  • retention.resolution-1h - 采样为1小时数据保留的最长时间

通过 compact 的启动参数可以大概知道 compact 的运行机制。根据设置的 wait-interval时间为周期,去对象存储里面清理数据,而清理数据的条件则是清理多长时间之前的数据,而且根据采样保留配置(retention.resolution-5m、retention.resolution-1h)来清理对象存储中的指标数据。

我们来看一下compact在k8s中运行的yaml文件:

apiVersion: apps/v1kind: StatefulSetmetadata:  labels:    app.kubernetes.io/name: thanos-compact  name: thanos-compact  namespace: thanosspec:  replicas: 1  selector:    matchLabels:      app.kubernetes.io/name: thanos-compact  serviceName: thanos-compact  template:    metadata:      labels:        app.kubernetes.io/name: thanos-compact    spec:      containers:      - args:        - compact        - --wait        - --objstore.config-file=/etc/thanos/objectstorage.yaml        - --data-dir=/var/thanos/compact        - --retention.resolution-raw=90d        - --retention.resolution-5m=180d        - --retention.resolution-1h=360d        image: thanos.io/thanos:v0.22.0        livenessProbe:          failureThreshold: 4          httpGet:            path: /-/healthy            port: 10902            scheme: HTTP          periodSeconds: 30        name: thanos-compact        ports:        - containerPort: 10902          name: http        readinessProbe:          failureThreshold: 20          httpGet:            path: /-/ready            port: 10902            scheme: HTTP          periodSeconds: 5        terminationMessagePolicy: FallbackToLogsOnError        volumeMounts:        - mountPath: /var/thanos/compact          name: data          readOnly: false        - name: thanos-objectstorage          subPath: objectstorage.yaml          mountPath: /etc/thanos/objectstorage.yaml      terminationGracePeriodSeconds: 120      volumes:      - name: thanos-objectstorage        secret:          secretName: thanos-objectstorage  volumeClaimTemplates:  - metadata:      labels:        app.kubernetes.io/name: thanos-compact      name: data    spec:      storageClassName: thanos-data-db      accessModes:      - ReadWriteOnce      resources:        requests:          storage: 20Gi
复制

同时也可以指定compact的service:

apiVersion: v1kind: Servicemetadata:  labels:    app.kubernetes.io/name: thanos-compact  name: thanos-compact  namespace: thanosspec:  ports:  - name: http    port: 10902    targetPort: http  selector:    app.kubernetes.io/name: thanos-compact
复制

query与compact的介绍就到这里了,下节将继续带来thanos的组件sidecar的介绍

本系列近期回顾:

Prometheus系列6 - thanos组件详解之storer&receiver

Prometheus系列5 - Alertmanager源码阅读

Prometheus系列4 - 高可用集群thanos

Prometheus系列3 - AlertManager专场

prometheus系列2 - Exporter专场prometheus(一)快速入门

文章转载自栋总侃技术,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论