在用LogStash做日志处理的时候,几乎都需要进行许多的调试,主要是针对Filter。而LogStash是运行在Jvm上,意味着每一次的启动都需要耗费大量的时间,许多教程文章都说推荐使用stdin/stdout
,从 command line 输入,然后将输出打印到控制台来输出。LogStash也提供了配置文件重载功能,期望场景是:从命令行输入,然后观察输出是否符合预期,如不符合则修改DSL的配置,然后再重复前步骤。但问题是,stdin
方式不支持配置重载。
于是,我抛弃了stdin
的调试方式,直接使用beat或者file:
然后手工Mock数据:
echo "log" >> test.log
然后开启自动重载和间隔(启动参数或者配置文件)
--config.reload.automatic
--config.reload.interval <interval>
当自动重载触发失败时,可以发送信号到进程手工触发:
kill -SIGHUP <pid>
当然了,grok的正则调试还是可以先采用在线工具(虽然仍然有些反应“缓慢”):
- Kibana的DevTool里有Grok调试(推荐)
- http://grokdebug.herokuapp.com
- http://grokconstructor.appspot.com