菜单
文档breadcrumb arrow Grafana Mimirbreadcrumb arrow 配置breadcrumb arrow 配置要阻止的查询
开源

配置要阻止的查询

在某些情况下,您可能希望控制发送到 Mimir 安装的查询。这些查询可能有意或无意地消耗大量资源,并可能影响服务的整体稳定性和成本。

您可以使用按租户覆盖配置来阻止查询

yaml
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 格式化程序可能会重新排序运算符,删除空的选择器花括号,并移除换行符、多余的空格和注释。

格式化查询示例

空的选择器花括号被移除

bash
mimirtool promql format 'foo{}'
console
foo

运算符被重新排序

bash
mimirtool promql format 'sum(container_memory_rss) by (namespace)'
console
sum by (namespace) (container_memory_rss)

换行符、多余空格和注释被移除

bash
mimirtool promql format '
rate(
  metric_counter[15m] # comment 1
) /
rate(
  other_counter[15m] # comment 2
)
'
console
rate(metric_counter[15m]) / rate(other_counter[15m])

查看被阻止的查询

被阻止的查询会被记录日志,并按租户统计在 cortex_query_frontend_rejected_queries_total 指标中。