由于日期格式错误,ElasticSearch拒绝服务器的Logstash记录

时间:2015-10-29 02:26:45

标签: logstash log4j2 logstash-grok

我正在安装包括REDIS在内的ELK,并成功地将一个服务器/进程交付给ElasticSearch(ES)。 最开心的是这个。 但是,在更新现有服务器/进程以开始使用logstash时,我看到logdate以yyyy-MM-dd HH:mm:ss,sss的形式出现。 请注意,日期和时间之间缺少 T 。 ES对此并不满意。

两台服务器正在使用的Log4j模式是:

<PatternLayout pattern="~%d{ISO8601} [%p] [%t] [%c{1.}] %m%n"/>

Logstash配置与源日志文件路径

的例外情况相同
input{

    file{
        type => "log4j"
        path => "/var/log/restapi/*.log"
        add_field => {
            "process" => "restapi"
            "environment" => "DEVELOPMENT"
        }
        codec => multiline {

           pattern => "^~%{TIMESTAMP_ISO8601} "
           negate => "true"
           what => "previous"
        }
    }


}

filter{

    if [type] == "log4j"{
        grok{
            match => {
                message => "~%{TIMESTAMP_ISO8601:logdate}%{SPACE}\[%{LOGLEVEL:level}\]%{SPACE}\[%{DATA:thread}\]%{SPACE}\[%{DATA:category}\]%{SPACE}%{GREEDYDATA:messagetext}"
            }            
        }


    }

}

output{
    redis{
        host => "sched01"
        data_type => "list"
        key => "logstash"
        codec => json
    }

    stdout{codec => rubydebug}

}

stdout行用于当前调试目的,因此很明显,在正确工作的服务器上,GROK过滤器正确地形成了logdate。 Good Log Date format

与错误形成的输出相比。 Bad log date format

与高级别的唯一区别在于构建服务器的时间。 寻找关于可能导致什么的想法或将T添加到字段中的方法

1 个答案:

答案 0 :(得分:0)

DatePatternConverter ISO8601_PATTERN下引发的错误不符合ISO8601 https://issues.apache.org/jira/browse/LOG4J2-670,导致我检查旧应用程序中使用的log4j2库的版本。发现它是Beta。已更新至v2.3,并且dateTime值已开始正确填充。现在正确形成的价值,ElasticSearch很乐意接受它。