配置基于资源利用率的 ingester 读取路径限制
Grafana Mimir 允许您配置 CPU 和/或内存利用率的限制,当达到任一限制时,ingester 将拒绝传入的读取请求。这样做的目的是防止昂贵的查询中断写入路径,确保写入路径具有最低限度的余量。ingester 的内存利用率模型对应于 Go 堆大小,它会跟踪此大小以及进程 CPU 利用率的滑动窗口平均值。
进程 CPU 利用率和 Go 内存堆大小每秒采样一次,并计算 CPU 利用率的滑动窗口平均值。如果任一指标大于或等于相应的配置限制,ingester 读取请求将被拒绝,并返回 HTTP 状态码 503(服务不可用),直到利用率水平再次低于各自的限制。
每当 ingester 因基于利用率的限制而拒绝读取请求时,都会增加 cortex_ingester_utilization_limited_read_requests_total
计数器指标。CPU 和内存利用率也通过 cortex_ingester_utilization_limiter_current_cpu_load
和 cortex_ingester_utilization_limiter_current_memory_usage_bytes
仪表指标分别进行跟踪。
要配置基于资源利用率的 ingester 读取路径限制,可以使用以下标志:
-ingester.read-path-cpu-utilization-limit
: CPU 利用率限制,以 CPU 核心数表示-ingester.read-path-memory-utilization-limit
: 内存限制,以字节表示
或者,您也可以通过 YAML 配置 ingester,如下面的代码片段所示:
ingester:
# Configure ingester to reject read requests when average CPU utilization is >= 0.8 cores
read_path_cpu_utilization_limit: 0.8
# Configure ingester to reject read requests when memory utilization is >= 16 GiB
read_path_memory_utilization_limit: 17179869184