我正在运行 logstash 1.5.0.1,并且我的文件夹中有多个配置文件/etc/logstash/conf.d
:
01-input-source-one.conf
02-input-source-two.conf
10-filter-one.conf
11-filter-two.conf
20-output-one.conf
21-output-two.conf
修改配置文件后,我使用进行测试/opt/logstash/bin/logstash agent -f /etc/logstash/conf.d --configtest
。
如果我的一个配置文件有问题,我会收到一条引用组合文件中的行号的消息,如下所示:
Error: Expected one of #, ", ', } at line 331, column 13 (byte 15167) after filter {
有时(但并非总是如此),它会在错误后显示一个代码片段,帮助我找到正确的文件,但错误中的行号仍然对我没有任何帮助。
有人知道是否有办法查看组合配置文件?
这对于解决不是由语法错误(传递--configtest
)导致的配置问题而是由排序问题导致的配置问题也很有用。
谢谢!
答案1
是的,从命令行交互运行它。但它会生成很多其他信息。
/opt/logstash/bin/logstash --debug -f /etc/logstash/conf.d
或者运行以下命令来测试并查看编译后的配置
/opt/logstash/bin/logstash --debug --debug-config -t -f /etc/logstash/conf.d/
您可能想要输出,这也会为您提供所有的 grok 过滤器等。
答案2
cat -n /etc/logstash/conf.d/*
这将按行号的顺序打印该文件夹中所有文件的内容作为一个连续的文件,以便 logstash 调试中的行号将相关联。
答案3
请注意,至少在 6.3.0 版本中,我发现如果您指定-f
或--path.config
作为目录,它将包括该目录下的所有文件(甚至包括 README 文件之类的内容)。
确保在命令行参数(如果使用)中指定.../conf.d/*.conf,并在pipelines.yml中指定。
在我的部署中,这是我调试配置的方式(版本 6.3.0 - 注意参数与上面提供的参数略有不同)
/usr/share/logstash/bin/logstash \
--path.settings /etc/logstash/enrichment/ \
--debug --config.debug -t
(请注意,我需要通过--path.settings 进行设置,因为我有多个 logstash 实例正在运行)
那么你可以获取配置,因为 logstash 会获取它,然后添加行号....
/usr/share/logstash/bin/logstash \
--path.settings /etc/logstash/enrichment/ \
--debug --config.debug -t 2>&1 \
| grep -v '^\[' \
| cat -n
但这样做很慢,但当某些更快的方法不起作用时,知道这一点很有用,例如:
cat /etc/logstash/enrichment/conf.d/*.conf | cat -n
只需记住请求与 logstash 相同的文件集;.../conf.d
指定不是与指定相同.../conf.d/*.conf