Thanos 组件详解
概述
参考:
Compactor(压实器)
注意:Compactor 在持久运行状态,会对对象存储发起大量的 GET 请求。最好间隔一段时间,运行一次,压缩一次数据即可,不必持久运行

Receiver(接收器)
参考:
Querier(查询器)
参考:
Querier 组件分为两部分
- Querier(查询器) # 实现了 Prometheus API,可以通过 Querier 发起 PromQL 查询请求,以获取数据;甚至可以从 Prometheus Server 的时序数据库中删除数据。每个从 Querier 发起的 PromQL 查询请求都会发送到可以暴露 StoreAPI 的组件上,并获取查询结果。
- Query Fronted(查询前端) # 实现了 Prometheus API,可以将请求负载均衡到指定的多个 Querier 上,同时可以缓存响应数据、也可以按查询日拆分。有点像 Redis 的效果
Querier 组件向一个或多个暴露 StoreAPI 的组件发起查询请求,并将结果去重后,返回给查询客户端。

Deduplication(重复数据删除)
The query layer can deduplicate series that were collected from high-availability pairs of data sources such as Prometheus. A fixed single or multiple replica labels must be chosen for the entire cluster and can then be passed to query nodes on startup.查询层可以从高可用性对数据源(如 Prometheus)收集的档案。必须为整个群集选择固定的单个或多个副本标签,然后可以通过启动时传递到查询节点。
Two or more series that are only distinguished by the given replica label, will be merged into a single time series. This also hides gaps in collection of a single data source.仅通过给定的副本标签区分的两个或更多系列,将合并为单个时间序列。这也隐藏了收集单个数据源的间隙。
单副本标签示例
假如现在 Query 从不同的 StoreAPI 中获取了三条时序数据
- Prometheus + sidecar “A”: cluster=1,env=2,replica=A
- Prometheus + sidecar “B”: cluster=1,env=2,replica=B
- Prometheus + sidecar “A” in different cluster: cluster=2,env=2,replica=A
我们像下面这样配置 query
If we configure Querier like this:
thanos query \
--http-address "0.0.0.0:9090" \
--query.replica-label "replica" \
--store "<store-api>:<grpc-port>" \
--store "<store-api2>:<grpc-port>" \
当我们在运行 query 时指定了 --query.replica-label 标志时,我们会将具有相同标签的时序去重只保留一个,此时我们将获得 2 个结果:
- up{job=“prometheus”,env=“2”,cluster=“1”} 1
- up{job=“prometheus”,env=“2”,cluster=“2”} 1
如果没有此副本标志(关闭数据删除),我们将获得 3 个结果:
- up{job=“prometheus”,env=“2”,cluster=“1”,replica=“A”} 1
- up{job=“prometheus”,env=“2”,cluster=“1”,replica=“B”} 1
- up{job=“prometheus”,env=“2”,cluster=“2”,replica=“A”} 1
多副本标签示例
- Prometheus + sidecar “A”: cluster=1,env=2,replica=A,replicaX=A
- Prometheus + sidecar “B”: cluster=1,env=2,replica=B,replicaX=B
- Prometheus + sidecar “A” in different cluster: cluster=2,env=2,replica=A,replicaX=A
上面的例子有两个需要去重的标签,那么就可以使用两次 --query.replica-label 标志。
thanos query \
--http-address "0.0.0.0:9090" \
--query.replica-label "replica" \
--query.replica-label "replicaX" \
--store "<store-api>:<grpc-port>" \
--store "<store-api2>:<grpc-port>" \
Query Frontend(查询前端)
参考:
Sidecar(边车)
参考:
反馈
此页是否对你有帮助?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.