promtail 进程活着,targets 页面也能看到文件,read lines 一直是 0,新追加的内容怎么都不进 Loki。日志里能对上时间点,这种反而好排。

positions 文件里记的 offset 已经越过了当前文件长度,或者通配路径没覆盖新目录,容器重建后 inode 变了被当成旧文件跳过。这一点先确认清楚,后面就不用反复试。

systemctl stop promtail
mv /var/lib/promtail/positions.yaml /tmp/positions.bak
systemctl start promtail
journalctl -u promtail -f

「Promtail 不采集」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。

别只看报错的最后一行,往上看几行,真正的起因通常在上面。同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。

把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。

处理上按这个顺序:停掉 promtail 备份并删掉 positions 让它重新扫;核对 scrape_configs 里的路径和标签;确认宿主机的日志目录确实已经挂进容器内部。

结果对不对很好判断,targets 页面的 read lines 持续增长,Loki 里能搜到刚打的新日志。

作者 9823189