配置要阻止的查询
在某些情况下,您可能希望控制发送到 Mimir 安装的查询。这些查询可能有意或无意地消耗大量资源,并可能影响服务的整体稳定性和成本。
您可以使用按租户覆盖配置来阻止查询
overrides:
"tenant-id":
blocked_queries:
# block this query exactly
- pattern: 'sum(rate(node_cpu_seconds_total{env="prod"}[1m]))'
# block any query matching this regex pattern
- pattern: '.*env="prod".*'
regex: true
阻止功能对即时查询、范围查询以及远程读取查询有效。
对于即时查询和范围查询,将根据查询评估模式;对于远程读取请求,将针对每组匹配器评估模式,如同匹配器形成了一个向量选择器一样。如果任何一组匹配器被阻止,则整个远程读取请求将被拒绝。
例如,包含匹配器 __name__
正则表达式匹配 foo.*
的远程读取查询被解释为 {__name__=~"foo.*"}
。要将阻止限制到此类选择器,请在您的模式中包含花括号,例如 \{.*foo.*\}。
要设置运行时覆盖配置,请参阅运行时配置。
注意
模式的顺序会被保留,因此将使用第一个匹配的模式。
格式化要阻止的查询
使用 Mimirtool 的 mimirtool promql format <query>
命令将 Prometheus 格式化程序应用于查询,以便在被阻止的查询 pattern
中使用。
Mimir 接收到的查询在应用阻止之前会解析为 PromQL 表达式。阻止的查询 pattern
将与已解析查询的格式化表示进行比较,以确保无论提交的查询格式如何差异,都能实现一致的查询阻止行为。
除了其他转换外,Prometheus 格式化程序可能会重新排序运算符,删除空的选择器花括号,并移除换行符、多余的空格和注释。
格式化查询示例
空的选择器花括号被移除
mimirtool promql format 'foo{}'
foo
运算符被重新排序
mimirtool promql format 'sum(container_memory_rss) by (namespace)'
sum by (namespace) (container_memory_rss)
换行符、多余空格和注释被移除
mimirtool promql format '
rate(
metric_counter[15m] # comment 1
) /
rate(
other_counter[15m] # comment 2
)
'
rate(metric_counter[15m]) / rate(other_counter[15m])
查看被阻止的查询
被阻止的查询会被记录日志,并按租户统计在 cortex_query_frontend_rejected_queries_total
指标中。