要不要也来分享分享一下啊

时间处理,乱序问题

Logstash | 作者 you2790 | 发布于2017年10月24日 | 阅读数:6754

 背景是这样的: 我是把应用打印的日志时间 替换掉了 @timestemp 字段,但是应用的日志时间格式有各种各样的,其中有一些时间只精确到了 秒,生产环境1秒钟会有很多日志打印,这时候查询出来的日志就会是乱序的。logstash能不能处理这种 只精确到秒的时间,在这个时间后面加上一个当前时间的毫秒. 
 
另外说一下为什么需要替换@timestemp字段,就是第一次部署日志系统的时候,如果不替换,历史日志的时间就不是日志真正的打印时间而是日志的收集时间,这样历史日志就不能按时间来搜索了。
 
已邀请:

you2790

赞同来自:

目前解决方案: 将提取的时间字符串 转换成 date 类型字段 logdate  不覆盖 @timestamp ,查询时根据logdate字段查询并按照@timestamp排序 ,这里还有一个小问题,我想用logdate的年与日动态产生 索引,而不是用@timestamp
就是下面的 %{+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}"
           }

}
 
 

要回复问题请先登录注册