使用logstash来解析csv文件

时间:2014-03-24 16:15:58

标签: csv elasticsearch logstash

我有一个弹性搜索索引,我用它来索引一组文档。

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

我的问题是我有以下几点的内容

field1,field2,field3,number@number#number@number#number@number

在最后一栏中,我将键值对键值@值用#分隔,并且可以有任意数量

我有没有办法使用logstash来解析它并让它将最后一列存储为elasticsearch(或其他一些可搜索格式)中的以下json,以便我能够搜索它

[
  {"key" : number, "value" : number},
  {"key" : number, "value" : number},
  ...
]

1 个答案:

答案 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。希望这可以帮到你。