如何在 Logstash 中将 yyyymmdd 格式化为 yyyy-mm-dd?
How to format, yyyymmdd to yyyy-mm-dd in Logstash?
几周以来我就开始使用 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
,因为我无法使用 "Date" grok 过滤器。或者有没有办法用上面的 yyyymmdd
日期格式过滤掉它?
编辑:
我特此附上我的自定义模式和 logstash conf
.
的过滤器部分
我正在使用的模式:LOGTIMESTAMP %{YEAR}%{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 中的输出:
如有任何帮助,我们将不胜感激。
您可以使用 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
字段。
几周以来我就开始使用 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
,因为我无法使用 "Date" grok 过滤器。或者有没有办法用上面的 yyyymmdd
日期格式过滤掉它?
编辑:
我特此附上我的自定义模式和 logstash conf
.
我正在使用的模式:LOGTIMESTAMP %{YEAR}%{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 中的输出:
如有任何帮助,我们将不胜感激。
您可以使用 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
字段。