【问题标题】:What are some best practices for handling large logstash configuration files?处理大型 logstash 配置文件的最佳实践是什么?
【发布时间】:2014-10-22 19:15:56
【问题描述】:

我即将部署一个 logstash 实例,该实例将处理各种输入并执行多个过滤操作。考虑到输入的复杂性和数量,配置文件很可能最终会包含大量 if-then 语句。

我的问题是:

  1. 有没有办法让配置文件更“模块化”?在编程意义上,我会创建函数/子例程,以便我可以独立测试。我考虑过动态创建可用于测试的迷你配置文件。然后可以将这些迷你文件组合成一个生产配置。

  2. 是否有任何“最佳实践”来测试、部署和管理更复杂的 Logstash 配置?

谢谢!

【问题讨论】:

    标签: configuration logstash


    【解决方案1】:

    本身不支持函数/子例程。我将不同的过滤器分成单独的文件以保持逻辑分离并避免拥有巨大的文件。我在不同的文件中也有输入和输出。这样我就可以将所有过滤器与调试输入/输出结合起来,例如

    input {
      stdin {}
    }
    
    output {
      stdout {
        codec => rubydebug
      }
    }
    

    并手动调用 Logstash 来检查给定输入的结果。由于过滤器排序很重要,我使用 Logstash 按字母顺序读取配置文件的事实,因此文件命名为 NN-some-descriptive-name.conf,其中 NN是一个整数。

    我还编写了一个脚本,通过让您编写一个包含测试输入和预期结果消息的规范来自动执行此过程,如果存在不匹配,它会因错误而退出并显示差异。我也许可以开源它。

    至于部署,请使用您熟悉的任何配置管理系统,例如 Puppet、Chef、SaltStack、Ansible、CFEngine 或类似系统。我对 Ansible 很满意。

    【讨论】:

    • 当您说“按字母顺序读取配置文件”时,您是否将多个配置文件指定为 Logstash 命令行参数?
    • 不,我将 Logstash 指向一个包含文件的目录。 -f 选项接受文件和目录。在后一种情况下,Logstash 将读取除 *~ 之外的所有文件。
    【解决方案2】:

    正如@Magnus Bäck 所说,1. 的答案是否定的。目前不支持函数。

    但是至于您的第二个问题,有一种方法可以使 logstash 配置更加模块化。您可以将配置文件拆分为多个文件,并将logstash指向文件目录。

    检查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.
    

    【讨论】:

      猜你喜欢
      • 2011-03-21
      • 1970-01-01
      • 2012-03-22
      • 2010-10-15
      • 1970-01-01
      • 2021-09-04
      • 2011-09-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多