Regex Logstash无法处理多个异构输入
假设您有两种不同类型的日志,如FORTINET和NetASQ日志,您需要: grok FORTINET使用正则表达式,grok NETASQ使用其他正则表达式 我知道通过输入文件中的类型和过滤器中的条件,我们可以解决这个问题 因此,我使用了这个confing文件: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
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}?不,在配置正常工作之前,我不知道为什么现在不工作!!