关闭 Logstash

编辑

如果您正在将 Logstash 作为服务运行,请使用以下命令之一将其停止。

  • 在 systemd 上,使用:

    systemctl stop logstash

如果您直接在 POSIX 系统的控制台中运行 Logstash,则可以通过向 Logstash 进程发送 SIGTERM 来停止它。例如:

kill -TERM {logstash_pid}

或者,在控制台中输入Ctrl-C

受控关机期间会发生什么?

编辑

当您尝试关闭正在运行的 Logstash 实例时,Logstash 会在安全关闭之前执行几个步骤。它必须:

  • 停止所有输入、过滤器和输出插件
  • 处理所有进行中的事件
  • 终止 Logstash 进程

以下条件会影响关机过程:

  • 以较慢速度接收数据的输入插件。
  • 缓慢的过滤器,例如执行sleep(10000)的 Ruby 过滤器或执行非常繁重的查询的 Elasticsearch 过滤器。
  • 断开的输出插件,正在等待重新连接以刷新进行中的事件。

这些情况使关机过程的持续时间和成功与否变得不可预测。

Logstash 具有一个停滞检测机制,该机制会分析管道和插件在关机期间的行为。此机制会定期提供有关内部队列中进行中事件计数以及繁忙工作线程列表的信息。

要启用 Logstash 在关机停滞的情况下强制终止,请在启动 Logstash 时使用--pipeline.unsafe_shutdown标志。

不安全的关机、强制终止 Logstash 进程或因任何其他原因导致 Logstash 进程崩溃都可能导致数据丢失(除非您已启用 Logstash 使用持久队列)。尽可能安全地关闭 Logstash。

停滞检测示例

编辑

在此示例中,缓慢的过滤器执行阻止管道执行干净的关机。由于 Logstash 是使用--pipeline.unsafe_shutdown标志启动的,因此关机导致丢失 20 个事件。

bin/logstash -e 'input { generator { } } filter { ruby { code => "sleep 10000" } }
  output { stdout { codec => dots } }' -w 1 --pipeline.unsafe_shutdown
Pipeline main started
^CSIGINT received. Shutting down the agent. {:level=>:warn}
stopping pipeline {:id=>"main", :level=>:warn}
Received shutdown signal, but pipeline is still waiting for in-flight events
to be processed. Sending another ^C will force quit Logstash, but this may cause
data loss. {:level=>:warn}
{"inflight_count"=>125, "stalling_thread_info"=>{["LogStash::Filters::Ruby",
{"code"=>"sleep 10000"}]=>[{"thread_id"=>19, "name"=>"[main]>worker0",
"current_call"=>"(ruby filter code):1:in `sleep'"}]}} {:level=>:warn}
The shutdown process appears to be stalled due to busy or blocked plugins.
Check the logs for more information. {:level=>:error}
{"inflight_count"=>125, "stalling_thread_info"=>{["LogStash::Filters::Ruby",
{"code"=>"sleep 10000"}]=>[{"thread_id"=>19, "name"=>"[main]>worker0",
"current_call"=>"(ruby filter code):1:in `sleep'"}]}} {:level=>:warn}
{"inflight_count"=>125, "stalling_thread_info"=>{["LogStash::Filters::Ruby",
{"code"=>"sleep 10000"}]=>[{"thread_id"=>19, "name"=>"[main]>worker0",
"current_call"=>"(ruby filter code):1:in `sleep'"}]}} {:level=>:warn}
Forcefully quitting logstash.. {:level=>:fatal}

当未启用--pipeline.unsafe_shutdown时,Logstash 将继续运行并定期生成这些报告。