阻止不需要的查询
在某些情况下,您可能无法控制发送到 Loki 安装的查询。这些查询可能有意或无意地昂贵,并可能影响服务的整体稳定性或运行成本。
您可以使用每租户覆盖来阻止查询,如下所示
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-frontend
和 querier
日志中都会记录一个 query_hash
字段,方便参考。这是一个示例日志行
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 接收并作为告警/记录规则执行的查询将被阻止。