elasticsearch,logstash,Csv,elasticsearch,Logstash" /> elasticsearch,logstash,Csv,elasticsearch,Logstash" />

使用logstash解析csv文件

使用logstash解析csv文件,csv,elasticsearch,logstash,Csv,elasticsearch,Logstash,我有一个elasticsearch索引,我用它来索引一组文档 这些文档最初是csv格式的,我希望使用logstash解析这些文档,因为它有强大的正则表达式工具,比如grok 我的问题是我有以下几点 field1,field2,field3,number@number#number@number#number@number 在最后一列中,我有键值对key@value以#分隔,可以有任意数量的 有没有一种方法可以让我使用logstash来解析它,并让它以elasticsearch(或其他可搜索的格

我有一个elasticsearch索引,我用它来索引一组文档

这些文档最初是csv格式的,我希望使用logstash解析这些文档,因为它有强大的正则表达式工具,比如grok

我的问题是我有以下几点

field1,field2,field3,number@number#number@number#number@number
在最后一列中,我有键值对key@value以#分隔,可以有任意数量的

有没有一种方法可以让我使用logstash来解析它,并让它以elasticsearch(或其他可搜索的格式)将最后一列存储为以下json,这样我就可以搜索它了

[
  {"key" : number, "value" : number},
  {"key" : number, "value" : number},
  ...
]
首先,可以使用filter解析最后一列。 然后,您可以使用过滤器编写自己的代码来完成所需的工作

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}
}

仅供参考。希望这能对您有所帮助。

谢谢,我不知道ruby过滤器的存在,我正准备用ruby编写自己的过滤器并使用它,但这应该可以很好地完成这项工作。
    "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}"
]