由于日期格式错误,来自服务器的 Logstash 记录被 ElasticSearch 拒绝
Logstash records from a server being rejected by ElasticSearch due to malformed date
我正在安装包括 REDIS 在内的 ELK,并且已经成功地 server/process 将其日志传送到 ElasticSearch(ES)。
对此最满意。
但是,在更新现有 server/process 以开始使用 logstash 时,我看到日志日期以 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 行用于当前调试目的,很明显,在正常工作的服务器上,logdate 由 GROK 过滤器正确形成。
与格式错误的输出相比。
与高级别的唯一区别是服务器的构建时间。
寻找关于可能导致什么的想法或将 T 添加到字段中的方法
在 DatePatternConverter ISO8601_PATTERN 下提出的错误不符合 ISO8601 https://issues.apache.org/jira/browse/LOG4J2-670 导致我检查旧应用程序中使用的 log4j2 库的版本.发现是贝塔。更新到 v2.3 并且 dateTime 值开始正确填充。该值现在已正确形成,ElasticSearch 很乐意接受它。
我正在安装包括 REDIS 在内的 ELK,并且已经成功地 server/process 将其日志传送到 ElasticSearch(ES)。 对此最满意。 但是,在更新现有 server/process 以开始使用 logstash 时,我看到日志日期以 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 行用于当前调试目的,很明显,在正常工作的服务器上,logdate 由 GROK 过滤器正确形成。
与格式错误的输出相比。
与高级别的唯一区别是服务器的构建时间。 寻找关于可能导致什么的想法或将 T 添加到字段中的方法
在 DatePatternConverter ISO8601_PATTERN 下提出的错误不符合 ISO8601 https://issues.apache.org/jira/browse/LOG4J2-670 导致我检查旧应用程序中使用的 log4j2 库的版本.发现是贝塔。更新到 v2.3 并且 dateTime 值开始正确填充。该值现在已正确形成,ElasticSearch 很乐意接受它。