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

索引时间问题

Logstash | 作者 ziyou | 发布于2017年10月09日 | 阅读数:4531

在做数据分析的时候,要分析一个数据,就是一天内数据的文档量和大小,我在kibana里面根据每天的索引找到了相关信息的统计,但是因为ELK体系的索引采用的是零时区,根据索引来统计数据有8个小时的误差。
 
QQ截图20171009163755.png

如上图这个索引的时间是9月8号,但是这个是零时区的9月8号一整天的数据,我统计的时候要统计东八区也就是北京时间9月8号的数据,文档数量好统计,但是文档大小不好统计。
1、我有修正索引时间的想法,修改为北京时间,但是没有想到相应的解决办法
index => "xxxx-%{+YYYY.MM.dd}"
2、就是直接在es 里面统计文档大小,但是也是没有找到办法(深深地为自己的弱小感到羞愧,唉!╮(╯▽╰)╭)
 
以上两种思路,大家有什么解决办法吗?求教
已邀请:

wmdsjhjc

赞同来自: Wayne777

Kibana字段设置里面修改@timestamp的时间格式,然后会根据你浏览器的时区去更新索引里面的时间。然后kibana上显示的时区就调整过来了

白衬衣 - 金桥

赞同来自:

用dsl语法,query lte timestamp utc时间即可。
"query":{"bool":{"must":[{"query_string":{"query":"*"}},{"range":{"time":{"gte":1507539069693,"lte":1507539969693,"format":"epoch_millis"}}}],"must_not":[]}}

juneryang

赞同来自:

logstash配置@timestamp为本地时区

参考:http://www.cnblogs.com/zhzhang/p/6837989.html
input {

    beats {

        port => "5043"

    }

}

filter {

    ruby {

        code => "event.set('timestamp', event.get('@timestamp').time.localtime + 8*60*60); event.set('@timestamp', event.get('timestamp'))"

    }

    mutate {

        remove_field => "offset"

        remove_field => "@version"

        remove_field => "input_type"

        remove_field => "beat"

        remove_field => "host"

        remove_field => "source"

        remove_field => "type"

        remove_field => "day"

        remove_field => "tags"

        remove_field => "timestamp"

    }

}

output {

    stdout {

        codec => rubydebug

    }

    file{

        codec => line {format => "%{message}"}

        path => "/home/logstash/elk/data/logstash/test.%{+YYYY-MM-dd}"

    }

}
 
 
 
这个是我的解决方法,亲测可行。但是前提是没有输出到es(这个应该没有问题),kibana显示更没有做。

ziyou - 一个学习ELK的Java程序员

赞同来自:

关于这个问题,我描述的可能有点模糊,现在是我要实现统计“某一天”的日志数据的文档大小,是多少多少G这样的数据,但是找来找去只有在索引信息里才有文档的大小,就是一个像xxx-2017.09.09这样的索引,能统计出这样一个索引的文档大小,但是由于这个后缀日期是采用零时区的时间来生成的,所以这个索引里面的数据其实是北京时间9月9号8点到9月10 号8点的数据,所以我想修正索引后缀的日期(差8个小时),大家有什么办法吗?
 

要回复问题请先登录注册