Sha256: 2e29e7bb28af2f11d20651328059f03978fc8881458988b5e8baa505faf4d956

Contents?: true

Size: 1.8 KB

Versions: 6

Compression:

Stored size: 1.8 KB

Contents

require "fluent/plugin/grok"
require "fluent/plugin/parser_none"

module Fluent
  module Plugin
    class GrokParser < Parser
      Fluent::Plugin.register_parser("grok", self)

      desc "The format of the time field."
      config_param :time_format, :string, default: nil
      desc "The pattern of grok"
      config_param :grok_pattern, :string, default: nil
      desc "Path to the file that includes custom grok patterns"
      config_param :custom_pattern_path, :string, default: nil
      desc "The key has grok failure reason"
      config_param :grok_failure_key, :string, default: nil

      def initialize
        super
        @default_parser = Fluent::Plugin::NoneParser.new
      end

      def configure(conf={})
        super

        @grok = Grok.new(self, conf)

        default_pattern_dir = File.expand_path("../../../../patterns/*", __FILE__)
        Dir.glob(default_pattern_dir) do |pattern_file_path|
          @grok.add_patterns_from_file(pattern_file_path)
        end

        if @custom_pattern_path
          if Dir.exist? @custom_pattern_path
            Dir.glob(@custom_pattern_path + "/*") do |pattern_file_path|
              @grok.add_patterns_from_file(pattern_file_path)
            end
          elsif File.exist? @custom_pattern_path
            @grok.add_patterns_from_file(@custom_pattern_path)
          end
        end

        @grok.setup
      end

      def parse(text)
        @grok.parsers.each do |parser|
          parser.parse(text) do |time, record|
            if time and record
              yield time, record
              return
            end
          end
        end
        @default_parser.parse(text) do |time, record|
          record[@grok_failure_key] = "No grok pattern matched" if @grok_failure_key
          yield time, record
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
fluent-plugin-grok-parser-2.1.6 lib/fluent/plugin/parser_grok.rb
fluent-plugin-grok-parser-2.1.5 lib/fluent/plugin/parser_grok.rb
fluent-plugin-grok-parser-2.1.4 lib/fluent/plugin/parser_grok.rb
fluent-plugin-grok-parser-2.1.3 lib/fluent/plugin/parser_grok.rb
fluent-plugin-grok-parser-2.1.2 lib/fluent/plugin/parser_grok.rb
fluent-plugin-grok-parser-2.1.1 lib/fluent/plugin/parser_grok.rb