在 Mapping 里面,将 dynamic 参数设置成 strict 可以拒绝索引包含未知字段的文档。 此条 Tips 由 medcl 贡献。

logstash按照filter过滤出的时间动态创建索引 时区不对

Logstash | 作者 mzq | 发布于2018年04月08日 | 阅读数:6437

已日志的时间为时间戳可以 在意日志的的时间作为索引名称就差了8个小时
已邀请:

mzq

赞同来自:

 
input {
beats{
port => 5044
}
}
filter {
grok {
match => { "message" => "\[%{WORD:method}\] \[%{TIMESTAMP_ISO8601:timestamp}\] %{GREEDYDATA:syslog_message}"}
}
date {
match => [ "timestamp", "yyyy-MM-dd HH:mm:ss" ]
target=>"@timestamp"
timezone=>"Asia/Shanghai"
}
output {
elasticsearch {
hosts => ["node-0:9200"]
index => "mddweb_%{ yyyy.MM}"

}
}



在11月份的的索引中出现了12月1日前8个小时的日志


然后在12月份的索引中是接着12月1日8点以后的
 
 求大佬解答 

strglee

赞同来自:

在logstash filter 解决
1. 增加一个字段,计算timestamap+8小时
ruby { 
code => "event.set('index_date', event.get('@timestamp').time.localtime + 8*60*60)"
}
# 新增索引日期,解决地区时差问题


2. 用mutate插件先转换为string类型,gsub只处理string类型的数据,在用正则匹配,最终得到想要的日期
# 定义索引名时间
mutate {
convert => ["index_date", "string"]
gsub => ["index_date", "-\d{2}T([\S\s]*?)Z", ""]
gsub => ["index_date", "-", "."]
}

3.output配置
elasticsearch { 
hosts => ["localhost:9200"]
index => "mddweb_%{index_date}"
}

 

要回复问题请先登录注册