【问题标题】:Logstash: Handling a Configuration File for a FilterLogstash:处理过滤器的配置文件
【发布时间】:2014-08-24 06:01:05
【问题描述】:

我编写了一个过滤器并使用它的注册函数来加载一个外部 CSV 文件并填充一堆哈希表。然后过滤器函数访问哈希表并将字段添加到事件中。虽然效果很好,但缺点是它只加载一次,我需要重新启动 logstash 以在 CSV 文件更改后触发重新加载。也许我应该补充一点,过滤器当前正在使用来自三个不同文件输入的事件。

编写输入似乎无法解决它,因为输入与过滤器没有以某种方式绑定。因此,我的计划是每隔几个小时或在特定时间以某种方式重新加载 CSV 文件,并在此期间以某种方式阻止整个过滤器,即暂停传入事件。这听起来像是一件很奇怪的事情,我不确定logstash 是否真的打算像这样使用。

我是 Ruby 的新手,实际上我很惊讶过滤器工作得这么好。由于谷歌在整个问题上让我失望,我希望这里的任何人都有这方面的经验,可以发布一个示例的链接,或者可以指出我解决这个问题的另一种方法。

【问题讨论】:

    标签: ruby logstash


    【解决方案1】:

    出于教育目的,我查看了 logstash 的来源,发现我实际上可以理解正在发生的事情,而且事情比我想象的要复杂得多。

    pipeline.rb 中有一个函数filterworker 和一个类filterworker,我不知道实际使用的是哪一个,但我的发现似乎对两者都是正确的。

    基本上所有过滤器似乎都在一个线程中运行,以防它没有以其他方式配置。这意味着我可以在过滤器函数中的任何位置重新加载文件,并且所有过滤器的整个处理都将暂停(输入和输出可能仍会执行某些操作,但这由最多容纳 20 个条目的事件队列处理)。

    因此,这似乎对我有用:

      public
      def register
        @config_files_read_timestamps = {}
        read_config_files
      end # def register
    
      def filter(event)
        # return nothing unless there's an actual filter event
        return unless filter?(event)
    
        read_config_files
    
        :    
    
        # filter_matched should go in the last line of our successful code
        filter_matched(event)
      end # def filter
    
      private
      def read_config_files
        read_marker_file
        :
      end
    
      def check_for_changed_file?(filename)
        mtime = File.mtime(filename)
        @config_files_read_timestamps[filename] ||= Time.at(0)
        if @config_files_read_timestamps[filename] < mtime
          @config_files_read_timestamps[filename] = mtime
          return true
        end
      end
    
      def read_marker_file
        if !check_for_changed_file?("markers.txt")
          return
        end
        :
      end
    

    显然我不需要单独的线程来进行解析。如果我计划在特定时间开始重新加载,这将变得有必要。在这种情况下,我必须加入线程,然后继续进行事件处理。

    让我知道是否可以改进...

    【讨论】:

      猜你喜欢
      • 2015-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多