我有一个弹性搜索索引,我用它来索引一组文档。
这些文档最初是csv格式,我正在使用logstash解析它们,因为它具有强大的正则表达式工具,如grok。
我的问题是我有以下几点的内容
field1,field2,field3,number@number#number@number#number@number
在最后一栏中,我将键值对键值@值用#分隔,并且可以有任意数量
我有没有办法使用logstash来解析它并让它将最后一列存储为elasticsearch(或其他一些可搜索格式)中的以下json,以便我能够搜索它
[
{"key" : number, "value" : number},
{"key" : number, "value" : number},
...
]
答案 0 :(得分:2)
首先,您可以使用CSV过滤器来解析最后一列。 然后,您可以使用Ruby过滤器编写自己的代码来执行您需要的操作。
input {
stdin {
}
}
filter {
ruby {
code => '
b = event["message"].split("#");
ary = Array.new;
for c in b;
keyvar = c.split("@")[0];
valuevar = c.split("@")[1];
d = "{key : " << keyvar << ", value : " << valuevar << "}";
ary.push(d);
end;
event["lastColum"] = ary;
'
}
}
output {
stdout {debug => true}
}
使用此过滤器,当我输入
1 @ 10#2 @ 20
输出
"message" => "1@10#2@20",
"@version" => "1",
"@timestamp" => "2014-03-25T01:53:56.338Z",
"lastColum" => [
[0] "{key : 1, value : 10}",
[1] "{key : 2, value : 20}"
]
FYI。希望这可以帮到你。