我已经在笔记本电脑上设置了ELK,而我在使用时间戳字段时遇到了问题。 我的输入文件看起来像这样......(到目前为止一行)
Chckpoint 502 10.189.7.138 Allow 18 Mar 2015 15:00:01
我的代码看起来像这样..
input {
file {
path => "/usr/local/bin/firewall_log"
}
}
filter {
grok {
match => {"message", "%{WORD:type} %{NUMBER:nums} %{IP:sourceip} %{WORD:Action}"}
add_tag => "checkpoint"
}
date {
match => {"DATETIME" => "%{dd mmm yyyy hh:mm:ss}"}
target => "@timestamp"
}
}
output {
elasticsearch { host => localhost }
当我运行它时,我得到以下结果
"message" => "Chckpoint 502 10.189.7.138 Allow 18 Mar 2015 15:00:01 ",
"@version" => "1",
"@timestamp" => "2015-04-30T19:02:21.663Z",
"host" => "UOD-220076",
"path" => "/usr/local/bin/firewall_log",
"type" => "Chckpoint",
"nums" => "502",
"sourceip" => "10.189.7.138",
"Action" => "Allow",
"tags" => [
[0] "checkpoint"
除了时间戳之外,这是很好的 - 它显示了今天的日期,但我想要它做的是将时间戳设置为日志文件中的内容,在本例中为2015年3月18日15:00:01。 请帮助。
答案 0 :(得分:2)
如果你给它正确的信息,那就是date {}过滤器会为你做什么。
首先,为您的时间戳定义自定义模式:
MYTIMESTAMP %{MONTHDAY} %{MONTH} %{YEAR} %{TIME}
然后将其添加到您的grok模式中,以便获得一个新字段:
%{WORD:type} %{NUMBER:nums} %{IP:sourceip} %{WORD:Action} %{MYTIMESTAMP:mytime}
然后你可以将mytime变量传递给日期过滤器:
date {
match => {"mytime" => "dd MM YYYY HH:mm:ss"}
}