我即将部署一个logstash实例,该实例将处理各种输入并执行多个过滤操作。考虑到输入的复杂性和数量,配置文件很可能最终会有很多if-then语句。
我的问题是:
有没有办法让配置文件更加“模块化”?在编程意义上,我会创建函数/子程序,以便我可以独立测试。我已经考虑过动态创建可用于测试的迷你配置文件。然后可以将这些迷你文件合并为一个生产配置。
是否有任何"最佳做法"用于测试,部署和管理更复杂的Logstash配置?
谢谢!
答案 0 :(得分:2)
本身不支持函数/子程序。我将不同的过滤器分解为单独的文件以保持逻辑分离并避免使用巨大的文件。我还有不同文件中的输入和输出。这样我就可以将所有过滤器与调试输入/输出结合起来,例如
input {
stdin {}
}
output {
stdout {
codec => rubydebug
}
}
并手动调用Logstash来检查给定输入的结果。由于过滤器排序很重要,我使用的事实是Logstash按字母顺序读取配置文件,因此这些文件名为 NN -some-descriptive-name.conf,其中 NN 是一个整数。
我还编写了一个脚本,通过让您编写带有测试输入和预期结果消息的规范来自动执行此过程,如果存在不匹配,则会出现错误并显示差异。我或许可以开源吧。
对于部署,请使用您熟悉的任何配置管理系统,如Puppet,Chef,SaltStack,Ansible,CFEngine等。我对Ansible非常满意。
答案 1 :(得分:1)
正如@MagnusBäck所说,1的答案是否定的。目前没有功能支持。
但至于你的第二个问题,有一种方法可以使logstash配置更加模块化。您可以将配置文件拆分为多个文件,并将logstash指向files目录。
检查logstash man中的目录选项:
-f, --config CONFIG_PATH Load the logstash config from a specific file
or directory. If a direcory is given, all
files in that directory will be concatonated
in lexicographical order and then parsed as a
single config file. You can also specify
wildcards (globs) and any matched files will
be loaded in the order described above.