我对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修复了正则表达式
现在,regex过滤器看起来如下:
%{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?
谢谢
编辑:
我最终使用文件插件解决了这个问题。输出{
文件{ path =>“./ message_pattern /sample.log”message_pattern =>"%{client},%{number}“}}
发布于 2015-09-01 12:36:57
过滤器部分中的csv标记用于解析输入并将消息分解为键/值对。
在您的例子中,您已经在用grok解析输入,所以我打赌您不需要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****"
]
}这意味着grok表达式不能解析输入。
您应该根据输入修复表达式,然后csv将正确地输出。
查看http://grokconstructor.appspot.com/do/match以获得一些帮助
顺便说一下,你确定NSFW,CPU,COMPONENT_ID,.是在某个地方定义的?
HIH
https://stackoverflow.com/questions/32331642
复制相似问题