Logstash 是 Elastic Stack 中功能最強(qiáng)大的 ETL 工具,相較于 beats 家族,雖然它略顯臃腫,但是強(qiáng)在功能豐富、處理能力強(qiáng)大。大家在使用的過程中肯定也體驗(yàn)過其啟動(dòng)時(shí)的慢吞吞,那么有什么辦法可以減少等待 Logstash 的啟動(dòng)時(shí)間,提高編寫其處理配置文件的效率呢?本文給大家推薦一個(gè)小技巧,幫助大家解決如下兩個(gè)問題,讓大家更好地與這個(gè)笨重的大家伙相處。
- 減少 Logstash 重啟的次數(shù),也就節(jié)省寶貴的時(shí)間
- 方便快捷地向 Logstash 輸入需要處理的內(nèi)容
1. 打開 reload 配置開關(guān)
Logstash 啟動(dòng)的時(shí)候可以加上 -r 的參數(shù)來(lái)做到配置文件熱加載,效果是:
- 當(dāng)你修改了配置文件后,無(wú)需重啟 Logstash 即可讓新配置文件生效。
它的含義如下:

當(dāng)你寫好配置文件,比如 test.conf ,啟動(dòng)命令如下:
bin/logstash -f test.conf -r
啟動(dòng)完畢,修改 test.conf 的內(nèi)容并保存后,過 1 秒鐘,你會(huì)發(fā)現(xiàn) Logstash 端有類似如下日志輸出(注意紅色框標(biāo)記的部分),此時(shí)說明 reload 的成功。

如果你修改的配置文件有錯(cuò)誤,會(huì)看到報(bào)錯(cuò)的日志,你可以根據(jù)錯(cuò)誤提示修改。

至此,第一個(gè)問題解決!
2. 使用 HTTP INPUT
編寫配置文件的另一個(gè)痛點(diǎn)是需要針對(duì)不同格式的輸入內(nèi)容進(jìn)行詳細(xì)的測(cè)試,以防解析報(bào)錯(cuò)的情況出現(xiàn)。此時(shí)大家常用標(biāo)準(zhǔn)輸入來(lái)解決這個(gè)問題(stdin input),但是標(biāo)準(zhǔn)輸入對(duì)于文字編輯支持不太友好,而且配置文件熱更新的功能也不支持標(biāo)準(zhǔn)輸入。
在這里向大家推薦使用 http input 插件,配置如下:
input{
http{
port => 7474
codec => "json"
}
}
然后大家再用自己喜歡的 http 請(qǐng)求工具,比如 POSTMan、Insomnia 等向 http://loclahost:7474發(fā)送待測(cè)試內(nèi)容即可,如下是 Insomnia 的截圖。

至此,第二個(gè)問題也解決了。
3. 總結(jié)
相信看到這里,大家一定是躍躍欲試了,趕緊打開電腦,找到 Logstash,然后編輯 test.conf,輸入如下內(nèi)容:
input{
http{
port => 7474
codec => "json"
}
}
filter{
}
output{
stdout{
codec => rubydebug{
metadata => true
}
}
}
然后執(zhí)行啟動(dòng)命令:
bin/logstash -f test.conf -r
打開 Insomnia ,輸入要測(cè)試的內(nèi)容,點(diǎn)擊發(fā)送,開始舒爽流暢的配置文件編寫之旅吧!
