elasticsearch 使用Logstash动态解析,elasticsearch,logstash,kibana,logstash-grok,elasticsearch,Logstash,Kibana,Logstash Grok" /> elasticsearch 使用Logstash动态解析,elasticsearch,logstash,kibana,logstash-grok,elasticsearch,Logstash,Kibana,Logstash Grok" />

elasticsearch 使用Logstash动态解析

elasticsearch 使用Logstash动态解析,elasticsearch,logstash,kibana,logstash-grok,elasticsearch,Logstash,Kibana,Logstash Grok,我试图使用logstash解析动态文本,但遇到了以下问题: 例如,请看以下文本: 编号1 如果我只有一个数字,我可以很容易地把它放入一个变量中 解析过程如下所示: grok { match => [ "message", "number(s) %{NUMBER:NumberValue}" ] } 但是如何将多个数字动态解析为同一个变量(作为整数列表)?例如: 编号1 2 3 我认为单靠grok过滤器是做不到的。最简单的方法可能是将所有整数提取到一个空格分隔的字符串中,用拆分,然后使

我试图使用logstash解析动态文本,但遇到了以下问题:

例如,请看以下文本:

编号1

如果我只有一个数字,我可以很容易地把它放入一个变量中 解析过程如下所示:

grok {
   match => [ "message", "number(s) %{NUMBER:NumberValue}" ]
}
但是如何将多个数字动态解析为同一个变量(作为整数列表)?例如:

编号1 2 3


我认为单靠grok过滤器是做不到的。最简单的方法可能是将所有整数提取到一个空格分隔的字符串中,用拆分,然后使用将字符串中的每个元素转换为整数

filter {
  grok {
    match => ["message", "number\(s\) (?<numbers>\d+(?: \d+)*)"]
  }
  mutate {
    split => {
      "numbers" => " "
    }
  }
  ruby {
    code => "
      event['numbers'] = event['numbers'].collect { |i| i.to_i }
    "
  }
}
过滤器{
格罗克{
匹配=>[“消息”,“数字\(s\)(?\d+(?:\d+*)”]
}
变异{
拆分=>{
“数字”=>“”
}
}
红宝石{
代码=>”
事件['numbers']=事件['numbers'].收集{i | i.to_i}
"
}
}

要捕获整数列表,
[1,2,3]
还是字符串
“1,2,3”