Grafana Mimir Querier
Querier 是一个无状态组件,它通过在读取路径上获取时间序列和标签来评估 PromQL 表达式。
Querier 使用 store-gateway 组件查询长期存储,并使用 ingester 组件查询最近写入的数据。
工作原理
为了在查询时找到需要查找的正确块,当 Querier 接收到给定租户的第一个查询时,它会延迟下载 bucket 索引。Querier 将 bucket 索引缓存在内存中并定期更新。
bucket 索引包含租户的块列表和块删除标记。Querier 随后使用块列表和块删除标记来定位给定查询需要查询的块集合。
查询请求解析
当 Querier 接收到查询范围请求时,请求包含以下参数
query
: PromQL 查询表达式(例如,rate(node_cpu_seconds_total[1m])
)start
: 开始时间end
: 结束时间step
: 查询分辨率(例如,30
表示每 30 秒一个数据点)
对于每个查询,Querier 会分析 start
和 end
时间范围,计算包含在该时间范围内的至少一个样本的所有已知块列表。对于每个查询的块列表,Querier 会计算持有这些块的 store-gateway 实例列表。Querier 会向每个匹配的 store-gateway 实例发送请求,以获取在 start
和 end
时间范围内存与 query
匹配的序列的所有样本。
发送给每个 store-gateway 的请求包含预期要查询的块 ID 列表,store-gateway 返回给 Querier 的响应包含已查询的块 ID 列表。此块 ID 列表可能是请求块的子集,例如,当最近发生块重新分片事件且在过去几秒内完成时。
Querier 对从 store-gateway 收到的响应执行一致性检查,以确保所有预期的块都已查询。如果未查询到预期块,Querier 会从不同的 store-gateway 重试获取缺失块中的样本,最多重试 -store-gateway.sharding-ring.replication-factor
(默认为 3)次或最多 3 次,取两者中较低的值。
如果在所有重试尝试后一致性检查失败,查询执行将失败。由于 Querier 未查询所有块而导致的查询失败可确保查询结果的正确性。
如果查询时间范围与 -querier.query-ingesters-within
时长重叠,Querier 还会将请求发送给 ingester。发送给 ingester 的请求会获取尚未上传到长期存储或尚未通过 store-gateway 可用于查询的样本。
配置的 -querier.query-ingesters-within
时长应大于以下两项
-querier.query-store-after
- ingester 上传的块中存储的最旧样本被发现并可供查询的估计最短时间。使用默认配置运行 Grafana Mimir 时,上传块中最旧样本可供查询的估计最短时间为
3h
。
从 store-gateway 和 ingester 获取所有样本后,Querier 会运行 PromQL 引擎执行查询,并将结果发送回客户端。
连接到 store-gateway
您必须使用与配置 store-gateway 时相同的 -store-gateway.sharding-ring.*
标志(或其相应的 YAML 配置参数)配置 Querier,以便 Querier 可以访问 store-gateway 哈希环并发现 store-gateway 的地址。
连接到 ingester
您必须使用与配置 ingester 时相同的 -ingester.ring.*
标志(或其相应的 YAML 配置参数)配置 Querier,以便 Querier 可以访问 ingester 哈希环并发现 ingester 的地址。
缓存
Querier 支持以下缓存
缓存是可选的,但在生产环境中强烈推荐使用。
元数据缓存
Store-gateway 和 Querier 可以使用 Memcached 缓存以下 bucket 元数据
- 租户列表
- 每个租户的块列表
- 块
meta.json
存在性及内容 - 块
deletion-mark.json
存在性及内容 - 租户
bucket-index.json.gz
内容
使用元数据缓存可减少对长期存储的 API 调用次数,并阻止 API 调用次数随 Querier 和 Store-gateway 副本数量线性增长。
要启用元数据缓存,请设置 -blocks-storage.bucket-store.metadata-cache.backend
。
注意
目前,Mimir 支持使用
memcached
后端进行缓存。Memcached 客户端包含以 `-blocks-storage.bucket-store.metadata-cache.memcached.*` 前缀开头的标志提供的其他配置。
配置元数据缓存的其他标志以 `-blocks-storage.bucket-store.metadata-cache.*` 前缀开头。将 TTL 配置为零或负值将禁用给定项目类型的缓存。
注意
Store-gateway 和 Querier 应使用相同的 Memcached 后端集群。
Querier 配置
有关 Querier 配置的详细信息,请参阅Querier。