elasticsearch,Regex,Logstash,elasticsearch" /> elasticsearch,Regex,Logstash,elasticsearch" />

Regex Logstash无法处理多个异构输入

Regex Logstash无法处理多个异构输入,regex,logstash,elasticsearch,Regex,Logstash,elasticsearch,假设您有两种不同类型的日志,如FORTINET和NetASQ日志,您需要: grok FORTINET使用正则表达式,grok NETASQ使用其他正则表达式 我知道通过输入文件中的类型和过滤器中的条件,我们可以解决这个问题 因此,我使用了这个confing文件: input { file { type => "FORTINET" path => "/fortinet/*.log" sincedb_path=>"/logstash-autre_v

假设您有两种不同类型的日志,如FORTINET和NetASQ日志,您需要:

grok FORTINET使用正则表达式,grok NETASQ使用其他正则表达式

我知道通过输入文件中的类型和过滤器中的条件,我们可以解决这个问题

因此,我使用了这个confing文件:

input {
  file {
       type => "FORTINET"
       path => "/fortinet/*.log"
sincedb_path=>"/logstash-autre_version/var/.sincedb"
start_position => 'beginning'
  }
    file {
        type => "NETASQ"
        path => "/home/netasq/*.log"
   }
 } 
filter {
 if [type] == "FORTINET" {

        grok {
  patterns_dir => "/logstash-autre_version/patterns"

    match => [

    "message" , "%{FORTINET}"



    ]
    tag_on_failure => [ "failure_grok_exemple" ]
    break_on_match => false


    }


}

if [type] == "NETASQ" {
        # .......
 }
}


output {

elasticsearch {
cluster => "logstash"
}


}
我得到一个错误:

Got error to send bulk of actions: no method 'type' for arguments(org.jruby.RubyArray) on Java::OrgElasticsearchActionIndex::IndexRequest   {:level=>:error}
但如果不使用类型,我只搜索FORTINET日志,它就会工作


我该怎么办

我不确定这一点,但也许这有帮助:

我也有同样的错误,我认为这是由使用以下if语句引起的:

if [type] == "FORTINET"
您的类型字段与FORTINET进行了比较,但这可能是不可能的,因为FORTINET是字符串,而类型不是。有时,通过将类型设置为输入,如果已经存在类型,则不会替换该类型,但会将新类型添加到具有旧类型的列表中。您应该查看kibana或其他任何地方的数据,并尝试找到以下内容:

\"type\":[\"FORTINET\",\"some-other-type\"]
也许也没有这些。 如果您发现类似的情况,请不要显式设置输入的类型,并将If语句中的类型与您找到的其他类型进行比较


希望这能起作用我正在与更复杂的输入/转发器合作,但对我来说不会,但值得一试

您的配置看起来非常好。你确定你没有漏掉任何东西吗?在/etc/logstash/conf.d中没有额外的文件?这就是问题所在,我的配置非常好,我不知道发生了什么!我怀疑Logstash除了上面显示的配置之外还有其他配置。似乎错误与elasticsearch的输出部分有关,而不是输入或过滤器。您是否尝试过在输出中设置更多参数,如index_type=>%{type}?不,在配置正常工作之前,我不知道为什么现在不工作!!