这个坑值得记一笔。Grafana 接 Loki 2.9,查最近 6 小时的错误日志,面板一直转圈,最后弹 too many outstanding requests,curl 直接打 /loki/api/v1/query_range 也回 429,同一时间只有三个人在看板,Loki 单机部署没改过配额。

刚开始盯着「limits_config 里的 max_query_series 和 max_entries_limit_per_query 是默认小值」,折腾了半个多小时,排掉了。

把日志和配置对完,能解释这个现象的基本就这几处。单个查询的返回条数太大,服务端按请求上限直接拒绝;看板自动刷新 5 秒一次,多个面板同时触发查询把并发占满;查询没带时间范围上界,等价于全量扫描被算成重查询。

第一件事是用最小时间窗验证接口本身可用

curl -s -G 'http://loki:3100/loki/api/v1/query_range' --data-urlencode 'query={app="api"}' --data-urlencode 'start=2026-11-11T00:00:00Z' --data-urlencode 'end=2026-11-11T00:05:00Z' --data-urlencode 'limit=100' | jq '.data.result | length'

随后把 limit 加到 5000 复现拒绝

curl -s -o /dev/null -w '%{http_code}\n' -G 'http://loki:3100/loki/api/v1/query_range' --data-urlencode 'query={app="api"}' --data-urlencode 'limit=5000'

调整单查询条数上限并重启

docker exec loki sh -c "grep -n max_entries_limit_per_query /etc/loki/local-config.yaml"

剩下的就是把看板刷新间隔从 5 秒改成 30 秒

python -c "print({'refresh':'30s','panels':4})"

改完先别撤,确认这几项。同样时间窗的查询返回 200,看板能出曲线,连续刷新十分钟不再出现 429,Loki 日志里 no outstanding 相关告警。

容易忽略的是,这个报错是服务端主动限流而不是超时,先把单次查询的范围和条数压下来,再谈扩容,顺序反了会一直撞墙。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189