背景是这样的: 我是把应用打印的日志时间 替换掉了 @timestemp 字段,但是应用的日志时间格式有各种各样的,其中有一些时间只精确到了 秒,生产环境1秒钟会有很多日志打印,这时候查询出来的日志就会是乱序的。logstash能不能处理这种 只精确到秒的时间,在这个时间后面加上一个当前时间的毫秒.
另外说一下为什么需要替换@timestemp字段,就是第一次部署日志系统的时候,如果不替换,历史日志的时间就不是日志真正的打印时间而是日志的收集时间,这样历史日志就不能按时间来搜索了。
另外说一下为什么需要替换@timestemp字段,就是第一次部署日志系统的时候,如果不替换,历史日志的时间就不是日志真正的打印时间而是日志的收集时间,这样历史日志就不能按时间来搜索了。
1 个回复
you2790
赞同来自:
就是下面的 %{+YYYY.MM.dd} 如何换成取logdate 的 而不是取 @timestamp 的
output {
elasticsearch {
index => "logstash-%{user}-%{appname}-%{+YYYY.MM.dd}"
}
}
------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------------------
上面这种行不通,好像是说这个日期只能取@timestamp
所以换了一种思路,先将@timestamp时间备份,然后用收集的时间替换掉@timestamp ,这样就达成目标了
filter{
mutate{
add_field => ["read_time_string", "%{@timestamp}"]
}
grok{
patterns_dir=>["/home/leoyer/soft/logstash-5.5.0/config/pattern"]
match=>{
"message"=>[
"^\s*\[+%{TIME_QUEUEID:logdate}",
"^\s*\[\S*\]\s*%{TIME_QUEUEID:logdate}",
"^\s*%{TIME_QUEUEID:logdate}",
"^\s*%{IPORHOST} - - \[%{HTTPDATE:logdate}\]",
"^\s*%{CATALINA_DATESTAMP:logdate}",
"^\s*%{DATESTAMP_OTHER:logdate}",
"^\s*%{TIMESTAMP_ISO8601:logdate}",
"^\s*%{MONTH_CN:logdate}",
"^\s*%{TOMCAT_DATESTAMP:logdate}"
]
}
}
date{
match=>[
"logdate",
"yy-MM-dd HH:mm:ss SSS",
"yy-MM-dd HH:mm:ss,SSS",
"yy-MM-dd HH:mm:ss.SSS",
"yy-MM-dd HH:mm:ss ",
"yy-MM-dd HH:mm:ss",
"dd/MMM/yyyy:HH:mm:ss Z",
"MMM dd, yyyy hh:mm:ss a",
"EEE MMM dd HH:mm:ss z yyyy"
]
target=>"@timestamp"
}
}
output {
elasticsearch {
index => "logstash-%{user}-%{appname}-%{+YYYY.MM.dd}"
}
}