Filter 使用Logstash筛选器创建新字段

Filter 使用Logstash筛选器创建新字段,filter,logstash,logstash-grok,logstash-configuration,logstash-file,Filter,Logstash,Logstash Grok,Logstash Configuration,Logstash File,基于Github上提供的示例过滤器,我已经开始编写自己的Logstash过滤器: 我的新过滤器读取名为Classficiation.jar的jar文件。我想取文本中的值,并以此为基础,对这些文本进行分类。这将需要创建一个新字段并在其中添加分类 该操作应产生以下结果: 输入 {"text" : "This is a happy thought :)"} 输出 {"text" : "This is a happy thought :)", "classification" : "Positive"

基于Github上提供的示例过滤器,我已经开始编写自己的Logstash过滤器:

我的新过滤器读取名为Classficiation.jar的jar文件。我想取文本中的值,并以此为基础,对这些文本进行分类。这将需要创建一个新字段并在其中添加分类

该操作应产生以下结果:

输入

{"text" : "This is a happy thought :)"}
输出

{"text" : "This is a happy thought :)", "classification" : "Positive"}
然而……我不确定该如何创建这个新领域。如您所见,该类接受一个参数,即文本

我真的很想得到关于如何为这个logstash过滤器的输出创建新字段的指导

# encoding: utf-8
require "logstash/filters/base"
require "logstash/namespace"
require 'java'
require 'Classficiation.jar'

import 'classficiation.Classficiation'

class LogStash::Filters::Classify < LogStash::Filters::Base

  # This is how to configure this filter from Logstash config.
  #
  # filter {
  #   classify {
  #   }
  # }
  #
  config_name "classify"


  t = Java::classficiation::Classficiation.new
  result = t.Classify(:text)
  # This should return a classification for the text, either positive
  # or negative

  public
  def register
  end

  public
  def filter(event)    
    ..........

    filter_matched(event)
  end
end
多谢各位

更新

我已经按照@hurb提供给我的说明,编辑了我的文件,使其看起来像这样:

# encoding: utf-8
require "logstash/filters/base"
require "logstash/namespace"
require 'java'
require 'Classficiation.jar'

import 'classficiation.Classficiation'

class LogStash::Filters::Classify < LogStash::Filters::Base

  config_name "classify"

  t = Java::classficiation::Classficiation.new

  public
  def register
  end

  public
  def filter(event)    
    event["result"] = t.Classify(event["text"])
    filter_matched(event)
  end
end
但是,这开始给我一个错误:

NameError: undefined local variable or method 'Classify' for #<LogStash::Filters::Classify:0x44850d11>
当我尝试在过滤器中包含t=Java::classficiation::classficiation.new时,它会给出错误:

NameError: undefined local variable or method 'Classify' for #<LogStash::Filters::Classify:0x44850d11>
动态常数赋值


为什么会这样?

您可以在类的末尾访问filterevent函数中的所有事件字段。可以使用事件参数event[message]访问字段。因此,类似于event[result]=t.Classifyevent[text]的内容可能就是您要查找的内容,它会创建一个新的字段结果

但是,我认为您的代码还存在一些其他问题。请仔细检查您的filterevent功能。似乎有一个不必要的结局。我不确定java导入,但我认为应该是java_导入'classficiation.classficiation'而不是导入

这样开始:

# encoding: utf-8
require "logstash/filters/base"
require "logstash/namespace"
require 'java'
require 'Classficiation.jar'

import 'classficiation.Classficiation'

class LogStash::Filters::Classify < LogStash::Filters::Base

  config_name "classify"

  t = Java::classficiation::Classficiation.new

  public
  def register
  end

  public
  def filter(event)    
    event["result"] = t.Classify(event["text"])
    filter_matched(event)
  end
end

您可以尝试执行这样的脚本,看看它是否提供了所需的输出。然后尝试将其迁移到logstash过滤器。

hmm好的,我这样做了,然后想用logstash测试过滤器。但是,当我在那里安装gem as过滤器时,它给出了错误过滤器notinstalled,即使列出已安装的过滤器显示已安装此特定过滤器。。你知道我为什么会犯这个错误吗?谢谢,我想添加多个字段。事件将占用多个字段,对吗?所以它看起来像这样:event[result]=t.Classifyevent[text]\n event[result2]=a.Classify2event[text]Hm,您使用的是哪个版本的日志存储?您是否尝试安装其他过滤器?例如,logstash过滤器示例?您使用哪个命令安装过滤器?回答你的第二个问题应该是logstash/bin/plugin install logstash-filter-abc.gem:是的,多个字段都很好。别介意前面的问题,我都能解决。并且我能够在logstash.conf文件中包含我的自定义过滤器,并在没有错误的情况下启动logstash。但是,当我输入一些东西时,它会给我一个错误名称error:undefined local variable或method'Classify',请注意,我必须移动t=Java::classfication::classfication.new外部筛选器,因为它给了我错误动态常量赋值