Logstash 持久化队列(Persistent Queue)怎么配置?
Logstash 持久化队列把事件先落盘再处理,宕机不丢数据。配置:queue.type: persisted,配合 queue.max_bytes 控制磁盘上限。本文给出完整配置、容量规划与注意事项。
在 logstash.yml 中设置 queue.type: persisted 即可开启持久化队列——事件先写磁盘再进过滤器,进程崩溃或机器重启后未处理的事件不丢失,重启自动续传。
核心配置
# logstash.yml
queue.type: persisted
path.queue: /var/lib/logstash/queue # 队列落盘目录
queue.max_bytes: 8gb # 队列磁盘上限,写满后反压输入端
queue.checkpoint.writes: 1024 # 每写多少事件做一次检查点
工作原理
输入 → 磁盘队列(持久化) → 过滤器 → 输出 → 确认后从队列删除
只有被输出端确认处理完的事件才从队列清除——这是"至少一次"语义的来源(可能重复,不丢失)。
容量规划
queue.max_bytes按"下游故障要能扛多久"估算:1 万 EPS × 500B/条 ≈ 430GB/天——扛 1 小时故障需约 18GB;- 队列写满后输入端反压停止读取( beats 客户端会重发)——这是特性不是故障,比丢数据强。
注意事项
- 磁盘 IOPS 要求上升,SSD 优先;
- 内存队列(默认)与持久化队列切换时,旧队列数据需先消费完再切换;
- 死信队列(dead_letter_queue)是另一件事,别混淆。
观测云对照
观测云 DataKit 的采集缓冲内置磁盘缓存与断网续传:网络中断时数据本地暂存,恢复后自动续传,无需单独配置队列参数。
常见问题(FAQ)
Q:开了持久化队列性能会降多少? 写盘开销约带来 10-20% 吞吐下降,批量大小调大可摊薄。
Q:队列目录能放 NFS 吗? 不要——网络文件系统的锁语义不可靠,用本地盘。