如何安全地停止 Logstash 进程?

安全停止 Logstash:systemd 管理用 systemctl stop;手动启动用 kill -TERM 发 SIGTERM 信号;前台运行用 Ctrl+C。SIGTERM 让 Logstash 优雅关闭,处理完管道中的事件再退出。

最佳实践
如何安全地停止 Logstash 进程?封面

安全停止的关键是发送 SIGTERM 信号:Logstash 收到后会停止接收新事件、把管道里已有的事件处理完再退出,不会丢数据。systemd 系统用 systemctl stop logstash,手动启动的用 kill -TERM <PID>,前台运行的直接 Ctrl+C。

三种场景

# 1. systemd 管理(生产环境最常见)
sudo systemctl stop logstash

# 2. 手动后台启动的进程
kill -TERM <logstash_pid>
# 找 PID:ps aux | grep logstash 或 jps -l

# 3. 前台运行调试时
# 直接按 Ctrl + C

为什么不能用 kill -9

kill -9(SIGKILL)会立即杀死进程:

  • 管道中正在处理的事件丢失;
  • 持久化队列(PQ)文件可能处于不一致状态;
  • sincedb 等状态文件可能损坏。

优雅关闭可能需要几秒到几分钟(取决于管道中积压的事件量),耐心等待。

加速关闭的配置

如果优雅关闭太慢,可以在 logstash.yml 中调整:

pipeline.unsafe_shutdown: false   # 默认 false=优雅关闭
# 设为 true 会强制立即退出,可能丢数据,不推荐生产使用

常见问题(FAQ)

Q:stop 命令后 Logstash 一直不退出?
A:通常是 output 插件在等下游(如 Elasticsearch 不可用时会重试)。检查日志确认原因;实在不行再考虑 kill -9。

Q:Ctrl+C 一次和两次的区别?
A:按一次发 SIGTERM 优雅关闭;再按一次会强制退出(可能丢数据)。

Q:怎么确认 Logstash 已完全停止?
A:ps aux | grep logstash 无进程,且日志中出现 Logstash shut down 字样。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台