Loki 限额是什么
limits_config 是 Loki 的限额配置,用来保护集群不被单个租户拖垮:写入速率与突发、每用户流数量、查询可返回的序列数、单次查询的时间跨度与返回条数都在这里设置,命中限额时客户端会收到明确报错。限额需要与标签设计、采集频率、查询习惯一起调,先定位是哪类请求异常,再决定放宽哪一项。
基本信息
| 配置位置 | Loki 配置文件的 limits_config 段 |
|---|---|
| 常用项 | ingestion_rate_mb、ingestion_burst_size_mb、max_streams_per_user、max_query_series、max_query_length |
| 生效范围 | 可按租户单独覆盖 |
| 适用版本 | Loki 2.x 及以上 |
| 权限要求 | 配置文件修改与服务重启 |
典型使用场景
- 多租户保护:为团队划分独立租户,避免某一方写入洪峰影响其他人
- 标签治理:用流数量限额倒逼高基数标签整改
- 查询保护:限制单次查询可返回的序列数与时间跨度,防止大查询拖垮查询器
- 容量对齐:把写入限额与存储层实际吞吐对齐,将压力挡在入口
- 成本控制:约束日志量增长节奏,配合保留策略一起控制开销
排查要点
- 遇到限流报错先确认是哪个租户、哪条流触发,再决定放宽还是治理
- 并发查询报错通常来自查询侧循环请求,先看发起方而不是直接调参
- 流数量超限的根因基本都是标签里带了请求标识或时间戳这类高基数值
- 放宽限额前先确认存储层还有余量,否则只是把瓶颈后移
- 每次限额调整都留记录,复盘时才知道参数何时被谁改过
常用限额
常用限额
limits_config:
ingestion_rate_mb: 8 # 单租户写入速率上限
ingestion_burst_size_mb: 16 # 突发缓冲
max_streams_per_user: 10000 # 流数量上限,与标签设计直接相关
max_query_series: 500 # 单次查询可返回的序列数
max_query_length: 721h # 单次查询最大时间跨度
max_entries_limit_per_query: 5000报错与处理方向
| 报错 | 含义 | 处理方向 |
|---|---|---|
| per stream rate limit exceeded | 某条流写入过快 | 拆分流或降低采集频率 |
| too many outstanding requests | 查询并发超限 | 收敛并发或调整查询并行度 |
| max streams per user | 流数量超限 | 治理高基数标签 |
| query too long | 时间跨度超限 | 缩短查询范围或改用预聚合 |
| HTTP 429 | 请求被限流 | 先按租户定位来源再调参 |
限额调大之前先定位异常请求来源,盲目放宽只会把压力从入口转移到存储层,故障表现会从明确报错变成查询集体变慢。