Logstash 參考指南(關閉Logstash)

關閉Logstash

若是你將Logstash做爲服務運行,請使用如下命令之一來中止它:安全

  • systemd使用:
systemctl stop logstash
  • upstart使用:
initctl stop logstash
  • sysv使用:
/etc/init.d/logstash stop

若是你正在POSIX系統的控制檯中直接運行Logstash,那麼你能夠經過向Logstash發送SIGTERM來中止它,例如:ruby

kill -TERM {logstash_pid}

或者,在控制檯中輸入Ctrl-Capp

在受控關閉期間會發生什麼?

當你試圖關閉一個正在運行的Logstash實例時,在它能夠安全關閉以前,Logstash會執行幾個步驟,它必須:ui

  • 中止全部輸入、過濾和輸出插件
  • 處理全部運行中的事件
  • 終止Logstash進程

如下條件影響關閉過程:this

  • 一個輸入插件以緩慢的速度接收數據。
  • 一個緩慢的過濾器,例如執行sleep(10000)的Ruby過濾器或執行很是繁重查詢的Elasticsearch過濾器。
  • 一個斷開鏈接的輸出插件,正在等待從新鏈接以刷新運行中的事件。

這些狀況使得關閉過程的持續時間和成功不可預測。插件

Logstash有一個失速檢測機制,能夠分析關閉期間管道和插件的行爲,這種機制按期生成關於內部隊列中運行中的事件計數和繁忙工做線程列表的信息。線程

爲使Logstash在中斷運行的狀況下強制終止,當你啓動Logstash時使用--pipeline.unsafe_shutdowncode

不安全的關閉、Logstash進程的強制關閉或因爲任何其餘緣由致使的Logstash進程崩潰均可能致使數據丟失(除非你啓用了Logstash使用持久隊列),儘量安全的關閉Logstash。

失速檢測的例子

在本例中,緩慢的過濾器執行能夠防止管道徹底關閉,因爲Logstash是由--pipeline.unsafe_shutdown標誌啓動的,所以關閉會致使20個事件的丟失。orm

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繼續按期運行並生成這些報告。隊列

相關文章
相關標籤/搜索