菜单
开源

Grafana米密尔query-frontend

query-frontend是一个无状态的组件,提供了相同的API查询器和可以用来加速阅读路径。虽然query-frontend不是必需的,我们建议您部署它。部署query-frontend时,应查询请求query-frontend而不是查询器。集群内的需要查询器来执行查询。

query-frontend内部查询在一个内部队列。在这种情况下,查询器作为工人,从队列中取出工作,执行,并将结果返回给query-frontend聚合。连接与query-frontends查询器,配置与query-frontend地址通过查询器-querier.frontend-address国旗。

我们建议您运行至少两个query-frontend副本原因高可用性。

Query-frontend架构

下面的步骤描述如何通过query-frontend查询移动。

注意:在这个场景中,query-scheduler不是部署。

  1. query-frontend接收查询。
  2. 如果查询是一个范围查询,query-frontend分裂的时候为多个较小的查询可以并行。
  3. query-frontend检查结果缓存。如果在缓存中查询结果,query-frontend返回缓存的结果。如果没有,根据以下步骤查询执行持续。
  4. 如果query-sharding启用,query-frontend试图碎片查询并行化。
  5. (或query-frontend地方查询查询如果发生分裂或分片的初始查询)在内存中的队列,在那里等待被查询器。
  6. 查询器拿起查询从队列中并执行它。如果查询或分片分割成多个子查询,不同的查询器可以捡起每一个单独的查询。
  7. query-frontend查询器或查询器返回结果,然后聚合,并将结果转发给客户端。

功能

本节描述query-frontend的功能。

排队

query-frontend使用排队机制:

  • 确保大型查询,可能导致内存不足(伯父)查询器的错误如果查询失败重试。这使管理员能够under-provision记忆查询,或更小的查询并行运行,这有助于降低总体拥有成本。
  • 防止多个大型请求被分发查询被单个查询器在所有查询器使用一个先入先出队列。
  • 防止一个租户denial-of-service-ing其他租户租户之间通过公平调度查询。

分裂

query-frontend可以分割成多个远程查询查询。默认情况下,分裂间隔24小时。下游query-frontend执行这些查询在并行查询器,结合在一起的结果。分裂阻止大型数日或数月查询在查询器造成内存不足错误和加速查询的执行。

缓存

query-frontend缓存查询结果并在后续查询重用它们。如果缓存的结果不完整,query-frontend计算所需的部分并行查询和执行他们下游查询器。query-frontend可以使查询的步骤参数来提高查询结果的可缓存性。结果缓存了Memcached的支持。

尽管调整步骤参数查询时间范围增加的性能Grafana米密尔,它违反了PromQL一致性的Grafana米密尔。如果你PromQL一致性并不是一个优先级,您可以启用步骤校准设置-query-frontend.align-queries-with-step = true

关于查询切分

query-frontend还提供了查询切分

为什么query-frontend可伸缩性是有限的

query-frontend可伸缩性有限配置每个查询器的工人数量。

当你不使用query-scheduler,query-frontend存储队列执行的查询。运行一个查询器-querier.max-concurrent工人,每个工人连接到一个query-frontend副本执行查询。一次查询器工人执行一个查询。

之间的连接查询器工人和query-frontend是持久的。建立连接后,通过连接多个查询,一个接一个。平衡员工的数量与每个query-frontend查询器工人使用循环方法选择query-frontend副本连接。

如果运行query-frontend副本超过工人的数量/查询器,查询器增加内部员工的数量匹配query-frontend副本。这确保了所有query-frontends有些工人连接,但引入了可伸缩性限制因为query-frontend副本你越多,越高是工人的数量为每个查询器运行,无论配置-querier.max-concurrent

query-scheduler是一个可选组件,您可以部署到克服query-frontend可伸缩性限制。

DNS配置和准备

当query-frontend启动时,它立即没有查询器。的/准备端点返回一个HTTP 200状态码只有当query-frontend至少有一个查询器附加到它,然后准备查询服务。配置/准备端点healthcheck在负载均衡器;否则,query-frontend扩展事件可能导致失败的查询或延迟,直到查询器连接到query-frontend高。

如果你使用query-frontend query-scheduler,/准备端点报道一个HTTP 200状态代码只有在query-frontend连接到至少一个query-scheduler。