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{} 过滤器。
我有以下格式的日志行并想提取字段:
"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{} 过滤器。