elasticsearch 基于logstash中转换的unix时间戳的值的索引
我需要根据UNIX时间戳自历元起秒数字段的值对记录进行索引,但是索引需要采用YYYY-MM-dd的形式。但是时间戳字段的值需要保留UNIX时间戳 所以问题分为两部分 如何在不破坏UNIX时间戳的情况下将时间戳文件转换为YYYY MM dd? 如何将YYYY-MM-dd值应用于索引? 这是我到目前为止所拥有的elasticsearch 基于logstash中转换的unix时间戳的值的索引,elasticsearch,logstash,logstash-grok,logstash-configuration,elasticsearch,Logstash,Logstash Grok,Logstash Configuration,我需要根据UNIX时间戳自历元起秒数字段的值对记录进行索引,但是索引需要采用YYYY-MM-dd的形式。但是时间戳字段的值需要保留UNIX时间戳 所以问题分为两部分 如何在不破坏UNIX时间戳的情况下将时间戳文件转换为YYYY MM dd? 如何将YYYY-MM-dd值应用于索引? 这是我到目前为止所拥有的 input { tcp { port => 5000 } } filter { csv { separator
input {
tcp {
port => 5000
}
}
filter {
csv {
separator => " " # <- this white space is actually a tab
skip_empty_columns => true
# other fields omitted for brevity
columns => ["timestamp"]
}
#grok {
# match => {"indexdate" => "%{NUMBER:timestamp}"}
#}
date {
match => ["timestamp", "YYYY-MM-DD"]
target => "@timestamp"
}
mutate {
# omitted for brevity
remove_field => []
}
}
output {
elasticsearch {
hosts => "elasticsearch:9200"
index => "indexname-%{+YYYY-MM-dd}"
}
}
我做了几次不同的尝试,但到目前为止运气不好。只需像这样更改您的日期过滤器,它就会工作。您在日期筛选器中使用的模式应该与您正在分析的字段的模式匹配,因为您有epoch seconds,那么该模式应该是UNIX:
请注意,您可能需要在csv筛选器中添加转换设置,以确保时间戳字段为整数
csv {
...
convert => { "timestamp" => "integer" }
}
嗨@Val,谢谢你的回答。如果可以的话,我有一个后续问题?有没有一种方法可以保留@timestamp的值,使其保持为当前时间?您可以在运行日期筛选器之前将@timestamp复制到另一个字段中。或者,您可以在日期过滤器中使用另一个目标字段,并保留@timestamp be。这些都能用吗?所以我把target=>@timestamp改为target=>@mytimestamp,效果非常好!logstach如何知道在计算此行时使用哪个字段:index=>indexname-%{+YYYY-MM-dd}?它默认使用@timestamp,您无法更改它。但是,您可以为此目的创建一个新字段。见此:
csv {
...
convert => { "timestamp" => "integer" }
}