菜单
文档breadcrumb arrow Grafana Lokibreadcrumb arrow 管理breadcrumb arrow 不需要的查询
开源

阻止不需要的查询

在某些情况下,您可能无法控制发送到 Loki 安装的查询。这些查询可能有意或无意地昂贵,并可能影响服务的整体稳定性或运行成本。

您可以使用每租户覆盖来阻止查询,如下所示

yaml
overrides:
  "tenant-id":
    blocked_queries:
      # block this query exactly
      - pattern: 'sum(rate({env="prod"}[1m]))'

      # block any query matching this regex pattern 
      - pattern: '.*prod.*'
        regex: true

      # block all metric queries
      - types: metric

      # block any filter or limited queries matching this regex pattern 
      - pattern: '.*prod.*'
        regex: true
        types: filter,limited

      # block any query that matches this query hash
      - hash: 2943214005          # hash of {stream="stdout",pod="loki-canary-9w49x"}
        types: filter,limited

注意

这些配置的更改无需重启;它们在运行时配置文件中定义。

可用的查询类型有

  • metric: 带有聚合的查询,例如 sum(rate({env="prod"}[1m]))
  • filter: 带有日志过滤器的查询,例如 {env="prod"} |= "error"
  • limited: 不带过滤器或指标聚合的查询

hash 选项使用查询字符串的32 位 FNV-1 哈希,表示为 32 位无符号整数。这通常比长查询字符串或需要大量字符串转义的查询字符串更容易使用。每个查询请求在 query-frontendquerier 日志中都会记录一个 query_hash 字段,方便参考。这是一个示例日志行

logfmt
level=info ts=2023-03-30T09:08:15.2614555Z caller=metrics.go:152 component=frontend org_id=29 latency=fast 
query="{stream=\"stdout\",pod=\"loki-canary-9w49x\"}" query_hash=2943214005 query_type=limited range_type=range ...

注意

模式的顺序会被保留,因此将使用第一个匹配的模式。

观察被阻止的查询

被阻止的查询会被记录下来,并在每个租户的 loki_blocked_queries 指标中进行计数。

范围

通过 API 接收并作为告警/记录规则执行的查询将被阻止。