Query Frontend

Query Frontend 组件

基于 thanos/v0.28,面向用户层面用于提供查询数据,它是无状态可以进行水平扩展,用于对范围查询与缓存。

当前仅接口/api/v1/query_range会经过该组件处理,其他接口请求会直接传递到下游查询组件。

启动参数

名称 默认值 说明
cache-compression-type "" 对结果集的压缩,支持 ‘snappy’
http-address 0.0.0.0:10902 监听 HTTP 服务地址
http-grace-period 2m HTTP服务接收到停止需等待时间,通过配置 context.WithTimeout 的实现
http.config "" TODO
labels.default-time-range 24h TODO;
labels.max-query-parallelism 14 TODO;
labels.max-retries-per-request 5 TODO;
labels.partial-response "" 如果未指定partial_response参数,则为标签请求启用部分响应
labels.response-cache-config "" 功能同 labels.response-cache-config-file
labels.response-cache-config-file "" TODO;
labels.response-cache-max-freshness 1m 最近允许标签请求的可缓存结果,以防止缓存可能仍在变化中的最近结果
labels.split-interval 24h 按间隔拆分标签请求并并行执行,标签时应大于0。配置了响应缓存配置
log.format logfmt 日志格式,可取值:logfmt、json
log.level info 日志级别
log.request.decision "" 已被废弃
query-frontend.compress-responses "" 压缩HTTP响应
query-frontend.downstream-tripper-config "" 功能同 query-frontend.downstream-tripper-config-file
query-frontend.downstream-tripper-config-file TODO;包含downstream tripper的配置,如果是 ‘127.0.0.1’ 则建议 max_idle_conns_per_host 至少配置为100
query-frontend.downstream-url “http://localhost:9090” 转发至下游兼容 prometheus query api 地址
query-frontend.forward-header "" 转发至下游的http请求头
query-frontend.log-queries-longer-than 0 记录超过配置时间的慢查询,设置0为关闭,设置小于0则开启所有
query-frontend.org-id-header "" 用于标识慢速查询源的请求头名称,将会植入至慢日志’org_id’字段中,如为配置默认植入的值为’anonymous'
query-range.align-range-with-step "" TODO;
query-range.max-query-length 0 限制查询的时间最大区间范围,设置0为禁用
query-range.max-query-parallelism 14 TODO; 前端将并行计划最大查询范围请求数
query-range.max-retries-per-request 5 TODO; 单个查询范围请求的最大重试次数;除此之外,将返回下游错误
query-range.partial-response "" 如果未指定partial_response参数,则为查询范围请求启用部分响应
query-range.request-downsampled "" 在对范围请求的响应为空或不完整的情况下,对下采样数据进行额外查询
query-range.response-cache-config "" 功能同 query-range.response-cache-config-file
query-range.response-cache-config-file "" 响应缓存的配置文件
query-range.response-cache-max-freshness 1m 最近允许查询范围请求的可缓存结果,以防止缓存可能仍在变化中的最近结果
query-range.split-interval 24h 按间隔拆分查询范围请求并并行执行,如果query-range.response-cache-config配置了,则必须开启
request.logging-config "" 功能同 request.logging-config-file
request.logging-config-file "" TODO;
tracing.config "" 功能同 tracing.config-file
tracing.config-file "" 链路跟踪配置文件
web.disable-cors "" 是否禁用跨域,默认允许所有

功能特性

查询分割

针对一个长查询切割为多个子查询,由启动参数--query-range.split-interval设定,这有以下几个好处:

  1. 保护’Query’查询组件,如果是比较大的范围查询有可能导致 OOM 发生;
  2. 更好的并行处理;
  3. 更好的负载均衡;

失败重试

由启动参数 --query-range.max-retries-per-request 设定,当HTTP请求查询失败时,会进行最大重试次数;

查询缓存

可以对前端查询的结果进行缓存,以便后续复用它们,如果缓存的结果不完整,将计算所需的子查询,并在下游查询器上并行执行它们。查询前端可以选择将查询与其步骤参数对齐,以提高查询结果的可缓存性。目前支持内存缓存(fifo cache)、memcached和redis。

以下几种情况将不会缓存:

  1. 不对副本去重,如查询开启参数dedup=false
  2. 开启查询指定存储过滤,Enable Store Filtering;
  3. 下游查询组件设置了"Cache-Control=no-store"头;

开启慢日志

由启动参数 --query-frontend.log-queries-longer-than 设置最大允许时间,超过则记录。