到目前為止,logstash 沒有給出官方的,在 windows 系統中作為後臺服務執行的方式。本文將介紹如何使用第三方工具 nssm 讓 logstash 作為後臺服務執行在 windows 中。
說明:演示的環境為 windows server 2016,logstash 的版本為 6.2.4。
安裝 Java Development Kit(JDK)
執行 logstash 6.2.4 需要先在環境中安裝 JDK,演示中筆者安裝的版本為 jdk-8u111-windows-x64,直接安裝到預設的目錄中。
在 logstash 的執行指令碼中用到了 JAVA_HOME 環境變數,因此我們需要先新增這個環境變數(注意,環境變數的值為 JDK 的實際安裝目錄):
環境變數新增完成後,新啟動一個 PowerShell 視窗,執行下面的命令:
> echo $env:JAVA_HOME
透過輸出的結果驗證環境變數是否被正確新增。
安裝 NSSM
NSSM 是 windows 下的一個後臺服務管理程式,完整功能請參考其官方文件。本文中我們使用它輕鬆地把 logstash 這樣的程式配置為後臺執行的服務。請從 NSSM 官方下載安裝包,解壓縮後把合適架構的可執行程式複製到安裝目錄。比如筆者把 x64 目錄下的 nssm.exe 檔案複製到了 C:\Program Files\nssm 目錄下。
為了方便使用,把路徑 C:\Program Files\nssm 新增到 PATH 環境變數中,這樣在任何路徑下都可以執行 nssm 命令而不用寫出其完整的路徑。
安裝 logstash
在 windows 中安裝 logstash 就是把從官方下載的安裝包 logstash-6.2.4.zip 解壓縮。示例中,我把它解壓到了 C 盤的根目錄下,並重新命名為 logstash,因此 logstash 的安裝目錄為:C:\logstash。
為了驗證最終的安裝結果,我們建立一個測試用的配置檔案。在 C:\logstash\bin 目錄下建立檔案 logstash.conf,編輯其內容如下:
input { # Accept input from the file. file { path => ["c:\input.txt"] } } output { # Output to the file. file { path => "c:\output.txt" codec => line { format => "custom format: %{message}"} } }
同時在 C 盤的根目錄下建立兩個文字檔案,分別為 input.txt 和 output.txt。
配置 logstash 為後臺服務
以管理員許可權啟動 PowerShell,進入 C:\logstash\bin 目錄,然後執行下面的命令:
> nssm install logstash
在上面的對話方塊中分別設定 Path、Startup directory 和 Arguments。
比如 Path 為:C:\logstash\bin\logstash.bat
Startup directory 為:C:\logstash\bin
Arguments 為:-f C:\logstash\bin\logstash.conf
最後點選 "Install service" 按鈕。
安裝成功後,在服務管理程式中會出現一個名稱為 "logstash" 的服務,其啟動型別為 "自動"。以後我們就可以在服務管理器中像管理其他服務一樣管理 logstash 服務了!現在先在服務管理器中啟動 logstash 服務。
驗證 logstash 服務執行正常
我們剛才新增了一個 logstash 配置,input 和 output 都是檔案,分別是 c:\input.txt 和 c:\output.txt。
在 PowerShell 中執行下面的命令:
> echo "hello" >> c:\input.txt > echo "world" >> c:\input.txt
然後檢視 c:\output.txt 檔案的內容,如果正常的話,其內容應該是:
custom format: hello
custom format: world
如果與上面的內容不符,可能是配置有問題,請參考本文重新檢查配置資訊。如果確認配置資訊正確,可以檢查 C:\logstash\logs 目錄下的日誌檔案,看看問題究竟出在哪裡。
參考:
Installing Logstash on Windows
NSSM
Set Logstash as a Windows service