Logstash 是 Elastic Stack 中功能最强大的 ETL 工具,相较于 beats 家族,虽然它略显臃肿,但是强在功能丰富、处理能力强大。大家在使用的过程中肯定也体验过其启动时的慢吞吞,那么有什么办法可以减少等待 Logstash 的启动时间,提高编写其处理配置文件的效率呢?本文给大家推荐一个小技巧,帮助大家解决如下两个问题,让大家更好地与这个笨重的大家伙相处。
- 减少 Logstash 重启的次数,也就节省宝贵的时间
- 方便快捷地向 Logstash 输入需要处理的内容
1. 打开 reload 配置开关
Logstash 启动的时候可以加上 -r
的参数来做到配置文件热加载,效果是:
- 当你修改了配置文件后,无需重启 Logstash 即可让新配置文件生效。
它的含义如下:

当你写好配置文件,比如 test.conf ,启动命令如下:
bin/logstash -f test.conf -r
启动完毕,修改 test.conf 的内容并保存后,过 1 秒钟,你会发现 Logstash 端有类似如下日志输出(注意红色框标记的部分),此时说明 reload 的成功。

如果你修改的配置文件有错误,会看到报错的日志,你可以根据错误提示修改。

至此,第一个问题解决!
2. 使用 HTTP INPUT
编写配置文件的另一个痛点是需要针对不同格式的输入内容进行详细的测试,以防解析报错的情况出现。此时大家常用标准输入来解决这个问题(stdin input),但是标准输入对于文字编辑支持不太友好,而且配置文件热更新的功能也不支持标准输入。
在这里向大家推荐使用 http input 插件,配置如下:
input{
http{
port => 7474
codec => "json"
}
}
然后大家再用自己喜欢的 http 请求工具,比如 POSTMan、Insomnia 等向 http://loclahost:7474
发送待测试内容即可,如下是 Insomnia 的截图。

至此,第二个问题也解决了。
3. 总结
相信看到这里,大家一定是跃跃欲试了,赶紧打开电脑,找到 Logstash,然后编辑 test.conf,输入如下内容:
input{
http{
port => 7474
codec => "json"
}
}
filter{
}
output{
stdout{
codec => rubydebug{
metadata => true
}
}
}
然后执行启动命令:
bin/logstash -f test.conf -r
打开 Insomnia ,输入要测试的内容,点击发送,开始舒爽流畅的配置文件编写之旅吧!
