我几周以来就开始使用ELK tool stack
。我需要的是获取包含日期和时间的日志事件的timestamp
并将其显示在不同的字段中(即:log_timestamp)。我试图提取DateStamp的所有可用选项,但没有任何效果。
这是我所拥有的日志文件的一行:
" 20160805 00:00:01.296,GetProvisioning,3,W1oOOW8oj58GhglVjVNg0Ssl4CXA1P,50219--1958335734-1470326399706,SUCCESS,GetProvisioningTransactionId-01223,null,W1oOOW8oj58GhglVjVNg0Ssl4CXA1P,en,CELCOM_MY_DCB "
我需要将日志事件的日期格式设置为yyyy-mm-dd
,因为我无法使用"日期" grok过滤器。或者有没有办法可以使用上述yyyymmdd
日期格式过滤掉它?
修改:
我特此附上我的自定义模式和logstash conf
的过滤器部分。
我正在使用的模式: LOGTIMESTAMP%{年}%{MONTHNUM}%{MONTHDAY}
logstash conf中的过滤条件:
filter {
grok {
patterns_dir => ["/home/chamith/work/ELK/logstash/logstash-2.3.4/bin/patterns"]
match => { "message" => "%{GREEDYDATA} %{LOGTIMESTAMP:logtimestamp}" }
}
mutate {
add_field => {
"timestamp" => "%{LOGTIMESTAMP}"
}
remove_field => ["logtimestamp"]
}
date {
match => ["logtimestamp", "yyyyMMdd HH:mm:ss"]
target => "logtimestamp"
}
}
和Kibana的输出:
任何帮助将不胜感激。
答案 0 :(得分:0)
您可以使用date
过滤器来解析时间戳。如果您想避免为grok
编写自定义正则表达式,可以合并这两个字段并使用date
过滤器。
对于你的特例:
grok {
match => { "message" => "%{POSINT:time1} %{TIME:time2} ... <Rest goes here> }
}
mutate {
add_field => {
"timestamp" => "%{time1} %{time2}"
}
remove_field => ["time1", "time2"]
}
date {
match => { "timestamp" => ""yyyyMMdd HH:mm:ss.SSS }
}
这几乎可以获得时间段并将其放在@timestamp
字段中。