配置logstash-output-csv

时间:2015-09-01 12:27:29

标签: logstash logstash-grok logstash-configuration

我是logstash的新手,我一直在尝试使用logstash-output-csv插件将现有日志转换为csv格式。

我的输入日志字符串如下所示,这是我们的应用程序中编写的自定义日志。

'128.111.111.11/cpu0/log:5988:W/"00601654e51a15472-76":687358:<9>2015/08/18 21:06:56.05: comp/45 55% of memory in use:  2787115008 bytes (change of 0)'

我写了一个快速正则表达式并使用grok插件将其添加到patterns_dir中。 我的模式如下:

IP_ADDRESS [0-9,.]+
CPU [0-9]
NSFW \S+
NUMBER [0-9]
DATE [0-9,/]+\s+[0-9]+[:]+[0-9]+[:]+[0-9,.]+
TIME \S+
COMPONENT_ID \S+
LOG_MESSAGE .+

没有添加任何csv过滤器我能够得到这个输出。

{
       "message" => "128.111.111.11/cpu0/log:5988:W/"00601654e51a15472-76":687358:<9>2015/08/18 21:06:56.05: comp/45 55% of memory in use:  2787115008 bytes (change of 0)",
      "@version" => "1",
    "@timestamp" => "2015-08-18T21:06:56.05Z",
          "host" => "hostname",
          "path" => "/usr/phd/raveesh/sample.log_20150819000609",
          "tags" => [
        [0] "_grokparsefailure"
    ]
}

这是我的配置,以便将csv作为输出

input {
    file {
        path => "/usr/phd/raveesh/temporary.log_20150819000609"
        start_position => beginning
    }
}

filter {
    grok {
        patterns_dir => "./patterns"
        match =>["message", "%{IP_ADDRESS:ipaddress}/%{CPU:cpu}/%{NSFW:nsfw}<%{NUMBER:number}>%{DATE}:%{SPACE:space}%{COMPONENT_ID:componentId}%{SPACE:space}%{LOG_MESSAGE:logmessage}" ]
        break_on_match => false
    }
    csv {
        add_field =>{"ipaddress" => "%{ipaddress}" }
}
}

output {
  # Print each event to stdout.
  csv {
    fields => ["ipaddress"]
    path => "./logs/firmwareEvents.log"
}
  stdout {
    # Enabling 'rubydebug' codec on the stdout output will make logstash
    # pretty-print the entire event as something similar to a JSON representation.
    codec => rubydebug
  }
}

以上配置似乎没有给出输出。我只想在csv文件中打印ipaddress,但最后我需要在csv文件中打印所有捕获的模式。所以我需要输出如下:

128.111.111.111,cpu0,nsfw,....

请您告诉我需要做出的改变。 ?

提前致谢

编辑:

我使用工具http://grokconstructor.appspot.com/do/match#result

按照建议修复了正则表达式

现在我的正则表达式过滤器如下所示:

%{IP:client}\/%{WORD:cpu}\/%{NOTSPACE:nsfw}<%{NUMBER:number}>%{YEAR:year}\/%{MONTHNUM:month}\/%{MONTHDAY:day}%{SPACE:space}%{TIME:time}:%{SPACE:space2}%{NOTSPACE:comp}%{SPACE:space3}%{GREEDYDATA:messagetext}

如何捕获单个拆分并将其另存为csv?

由于

编辑:

我终于使用File插件解决了这个问题。 输出{

文件{ path =&gt; &#34; ./日志/ sample.log&#34; message_pattern =&gt;&#34;%{client},%{number}&#34; } }

1 个答案:

答案 0 :(得分:2)

过滤器部分中的csv标记用于解析输入并将消息爆炸为键/值对。

在你的情况下,你已经用grok解析了输入,所以我打赌你不需要csv过滤器。

但在输出中我们可以看到有一个gorkfailure

{
       "message" => "128.111.111.11/cpu0/log:5988:W/"00601654e51a15472-76":687358:<9>2015/08/18 21:06:56.05: comp/45 55% of memory in use:  2787115008 bytes (change of 0)",
      "@version" => "1",
    "@timestamp" => "2015-08-18T21:06:56.05Z",
          "host" => "hostname",
          "path" => "/usr/phd/raveesh/sample.log_20150819000609",
          "tags" => [
        [0] "****_grokparsefailure****"
    ]
}

这意味着你的grok表达式无法解析输入。

您应该根据您的输入修复表达式,然后csv将正确输出。

结帐http://grokconstructor.appspot.com/do/match寻求帮助

顺便说一下,您确定NSFW,CPU,COMPONENT_ID,...的模式是在某处定义的吗?

HIH