Logstash 过滤器 - 动态命名字段

Logstash filter - name fields dynamically

我有以下格式的日志行并想提取字段:

"field1" => "content1","field2" => "content2",field3" => "content3",...

我既不知道字段名称,也不知道字段数量。

我用 ruby 尝试过,但出现错误:

Error: Expected one of #, {, } at line 8, column 51 (byte 113) after filter { ruby { code => " fieldArray = event['message'].split('"

我的配置如下,

input {
    stdin {}
      }

filter {
ruby {
    code => "
        fieldArray = event['message'].split('", "')
        for field in fieldArray
            field = field.delete '",'
            field = field.delete '"'
            result = field.split(': ')
            event[result[0]] = result[1]
        end
    "
  }
}

output {
    stdout {
        codec => rubydebug
      }
 }

请告诉我如何解决这些错误?

感谢您的帮助。

ruby 问题是因为您的代码中有双引号。由于您使用双引号将整个代码块括起来,因此您不能在内部使用它们。我想逃避他们会奏效。

您还可以查看 kv{} 过滤器,它通常可以轻松处理此类字段。如果不是,请使用 mutate->gsub 将“=>”转换为“:”并尝试 json{} 过滤器。