Logstash 如何自动重载(Auto-Reload)配置?
Logstash 启动加 --config.reload.automatic 即开启配置热重载,--config.reload.interval 控制检查间隔(默认 3 秒)。改完 conf 文件无需重启进程。本文给出用法与失败回滚行为说明。
启动时加 --config.reload.automatic 即可:Logstash 默认每 3 秒检查一次配置文件变化,发现修改重建管道而不重启 JVM 进程;会停止旧输入,是否丢失或重放取决于输入确认、缓冲和持久状态。
用法
bin/logstash -f /etc/logstash/conf.d/ \
--config.reload.automatic \
--config.reload.interval 5s
或在 logstash.yml 中持久化:
config.reload.automatic: true
config.reload.interval: 5s
重要行为
- 新配置校验失败(语法错误、插件问题)→ Logstash 继续使用旧配置运行,错误写日志——不会因为坏配置把管道搞挂;
- 重载是管道级:input 重启意味着文件 input 会从上次记录的位置(sincedb)继续;
- Systemd 部署同理:把参数写进启动命令或 logstash.yml。
配套建议
生产发布流程:--config.test_and_exit 先校验 → 替换配置 → 自动重载生效 → 观察 Logstash 日志确认 reload 成功。
常见问题(FAQ)
Q:reload 期间数据会丢吗? 不能保证。重载会先停止输入并尝试构建新管道,UDP 等无确认输入可能丢失;文件恢复还取决于 sincedb 与轮转状态,持久队列也不是所有输入零丢失的保证。
Q:只想手动触发重载? 不发参数的情况下给进程发 SIGHUP 信号(支持该机制的平台可用;Windows 不支持这一信号方式)。