Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 如何阻止elasticsearch索引在错误的年份自动创建_Date_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Logstash - Fatal编程技术网 elasticsearch,logstash,Date,elasticsearch,Logstash" /> elasticsearch,logstash,Date,elasticsearch,Logstash" />

Date 如何阻止elasticsearch索引在错误的年份自动创建

Date 如何阻止elasticsearch索引在错误的年份自动创建,date,elasticsearch,logstash,Date,elasticsearch,Logstash,我在今年年初就注意到了这一点,我在elasticsearch和logstash中询问过几次,但从未得到过解释如何最好地阻止它的回应。我也在网上找到了这篇文章,但它没有讨论如何阻止它在未来发生 目前,在elasticsearch中,我有许多索引,这些索引是为2015年11月至2015年12月自动创建的。从logstash读取日志并将结果发送到elasticsearch时,会自动创建索引。所讨论的日志是没有在时间戳中指定年份的日志,然后我使用时间戳并使用日期匹配函数将该时间戳设置为@timestam

我在今年年初就注意到了这一点,我在elasticsearch和logstash中询问过几次,但从未得到过解释如何最好地阻止它的回应。我也在网上找到了这篇文章,但它没有讨论如何阻止它在未来发生

目前,在elasticsearch中,我有许多索引,这些索引是为2015年11月至2015年12月自动创建的。从logstash读取日志并将结果发送到elasticsearch时,会自动创建索引。所讨论的日志是没有在时间戳中指定年份的日志,然后我使用时间戳并使用日期匹配函数将该时间戳设置为@timestamp系统字段。例如:

{"message":"Dec 31 12:03:00 server sudo:   zabbix : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/usr/sbin/asterisk -rx meetme","@version":"1","@timestamp":"2015-12-31T12:03:00.000Z","file":"/var/log/secure","host":"server","offset":"74","type":"syslog","syslog_timestamp":"Dec 31 12:03:00","syslog_hostname":"server","syslog_program":"sudo","syslog_message":"  zabbix : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/usr/sbin/asterisk -rx meetme","tags":["syslog"],"syslog_severity_code":5,"syslog_facility_code":1,"syslog_facility":"user-level","syslog_severity":"notice"}
此字段的@timestamp值设置为:

2015年12月31日12:03:00.000

我相信这些日志是在2015年之后由logstash处理的,我不确定,但我可能在处理日志之前重新启动了logstash。我之所以认为我重新启动了logstash,是因为我认为logstash启动时会检查年份,如果应用了日期筛选器,并且事件中没有指定年份,则logstash假设该年份必须是系统重新启动时的当前年份,elasticsearch将在将来针对索引应用这些事件


自动创建索引的能力非常强大,我不想停止这样做,但是当Logstash/elasticsearch处理带有去年年底事件时间戳的日志时,有没有办法阻止它在今年年底自动生成索引,以便日志进入正确的索引(即过去年份索引)

根据日期过滤器中的代码:

当logstash不知道日志事件发生的年份时(无法分析年份),它将假定它是当前年份。(在运行时查询)

请看,实际发生的年份刚刚丢失(随后将假定为当前年份),您唯一能做的就是在时间间隔的条件下删除事件

我认为您正在寻找的解决方案是:

可以匹配“未来”*年/月,并删除以下事件:

 filter {
   mutate {
    add_field => { "year_month" => "%{+yyyyMM}" }
   }
   if [year_month] =~ /^20151[012]$/ {
     drop { }
   }
 }
*节目与未来一样,但它们实际上属于前一年


有可能使用更高级的正则表达式来更好地匹配未来的事件。

经过进一步挖掘,这是一个

感谢您的回复,虽然您所说的有道理,但这并不完全是我想要的,我不想放弃事件,我想保留它们,但我还想将它们放入正确的索引中