
Loki Ingester 报 WAL 磁盘空间不足时如何调整 wal-disk-full-threshold【免费下载链接】lokiLike Prometheus, but for logs.项目地址: https://gitcode.com/GitHub_Trending/lok/lokiGrafana Loki 的 ingester 把接收到的数据先写入本地 Write Ahead LogWAL以保证崩溃后可恢复。当存储 WAL 的卷使用率达到阈值时ingester 会拒绝新写入日志中出现disk usage exceeded threshold, throttling writes告警。控制这个行为的就是--ingester.wal-disk-full-threshold参数默认 0.9即 90%。本文基于 WAL 文档、摄入故障排查文档 和配置参考说明如何确认这一现象、调整阈值并验证结果。先弄清限流机制阈值达到时 ingester 会做什么在调整之前需要明确这个参数控制的边界默认情况下Loki 监控存储 WAL 的卷的磁盘使用率使用率达到容量 90% 时ingester 拒绝新写入而不是接受无法持久化的数据。检查每 10 秒执行一次测量的是承载 WAL 目录的整个文件系统的使用率而不仅是 WAL 文件本身的大小。因此文档明确建议不要将 WAL 卷与其他数据共享。磁盘使用率回落到阈值以下后写入自动恢复无需人工干预。该限流行为在 Windows 上不可用。由于 Loki 会把每次写入复制到多个 ingester即使其中一个 ingester 被限流客户端写入仍可能成功。所以“客户端没报错”不代表限流没有发生判断是否触发要看指标和 ingester 日志。参数取值范围是 0.0 到 1.0设为0表示禁用这层保护代码中的配置校验会拒绝 0 到 1 区间之外的值。取值越低触发限流越早、磁盘余量越大取值越高触发限流越晚。区分“触发限流”和“磁盘彻底写满”两种现象排查文档把 WAL 磁盘问题分成两种它们的日志和后果不同调整阈值前要先确认自己处于哪一种达到阈值触发限流使用率 ≥ 阈值ingester 拒绝该节点上的新写入。ingester 日志出现 warn 级别disk usage exceeded threshold, throttling writes带usage_percent和threshold_percent字段。磁盘彻底写满日志出现Error writing to WAL, disk full, no further messages will be logged for this error。这种情况更少见只有两种成因——限流被禁用阈值设为0或者写入落盘时恰好处在两次 10 秒检查之间的空窗期。此时 ingester 继续接受写入但不再把条目写入 WAL这些条目在进程重启后的持久化保证不成立。两种情况都会使计数器loki_ingester_wal_disk_full_failures_total增加。该计数器既在跨过限流阈值时递增也在磁盘写满导致 WAL 写入失败时递增它不统计每一条被拒绝的写入——非零值说明 WAL 磁盘需要处理但不代表被拒写的条数。调整 wal-disk-full-threshold该参数不在limits_config下而是 ingester 的部署 flag对应配置文件中的ingester.wal.disk_full_threshold。配置文件方式ingester: wal: disk_full_threshold: 0.8命令行方式--ingester.wal-disk-full-threshold0.8两种方式等价选择与你现有部署方式一致的即可。修改后按你现有的部署方式重启/重新部署 ingester 使其生效WAL 文档把这一组 flag--ingester.wal-enabled、--ingester.wal-dir、--ingester.checkpoint-duration、--ingester.wal-replay-memory-ceiling、--ingester.wal-disk-full-threshold都归入“部署持久卷时需要关注”的配置ingester 需要以 StatefulSet 方式运行在固定卷上。取值时可以参考文档给出的实测磁盘占用数据一个 ingester 在 5000 个 stream、约 5 MB/s 写入量、5 分钟 checkpoint 周期下WAL 专用盘的使用率稳定在约 10–15 GB。文档同时提醒“不应以 100% 磁盘利用率为目标”。如果你的卷长期贴在这类水位上调低阈值更早限流比调高更晚限流、甚至禁用更稳妥调高或禁用意味着接受“磁盘写满后写入不持久化”的风险。如果磁盘水位长期偏高排查文档同时给出的其他解决方向有为 WAL 目录扩容、降低日志写入量、检查 checkpoint 配置ingester.checkpoint_duration默认 5 分钟以及确认旧 WAL 段在 checkpoint 后能正常清理。调整阈值只是改变触发限流的时机磁盘不够用时扩容或减量才是根治手段。验证调整是否生效看使用率指标loki_ingester_wal_disk_usage_percent是 0.0 到 1.0 的 gauge报告存储 WAL 的卷的当前使用率用来判断磁盘距离新阈值还有多远。注意它只在--ingester.wal-disk-full-threshold大于 0 时才上报——如果禁用了限流这个指标也就没有了。看限流切换日志ingester 日志中进入限流时输出 warn 级disk usage exceeded threshold, throttling writes恢复正常时输出 info 级disk usage below threshold, resuming writes两条日志都带当前usage_percent与threshold_percent可以直接核对是否按新阈值触发。保留告警规则排查文档建议的告警表达式loki_ingester_wal_disk_full_failures_total 0结合loki_ingester_wal_disk_usage_percent一起观察可以区分“刚跨阈值限流”和“磁盘已经写满”。限制与边界Windows 上不提供这套磁盘限流检查--ingester.wal-disk-full-threshold不会起作用。阈值不是保险箱即使启用了限流若写入落在两次检查之间的窗口内底层磁盘仍可能写满禁用阈值设为 0后同样如此。此时写入被接受但不写入 WAL跨重启的持久化保证对这些条目失效。该检查测量的是整个文件系统而非 WAL 文件WAL 卷上其他数据的增长也会推高使用率并提前触发限流。客户端写入可能因多 ingester 复制而在单个节点限流时仍然成功因此判断限流是否发生要以 ingester 侧的指标和日志为准。WAL 的完整行为说明包括 replay 内存上限--ingester.wal-replay-memory-ceiling、checkpoint 与 StatefulSet 部署细节见 docs/sources/operations/storage/wal.md限流与磁盘写满的日志、指标定义见 docs/sources/operations/troubleshooting/troubleshoot-ingest.md。【免费下载链接】lokiLike Prometheus, but for logs.项目地址: https://gitcode.com/GitHub_Trending/lok/loki创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考