基于 logstash 中转换后的 unix 时间戳值的索引
Index based on the value of a converted unix timestamp in logstash
我需要根据 UNIX 时间戳(自纪元以来的秒数)字段的值对记录进行索引,但是索引需要采用 YYYY-MM-dd
的形式。但是,时间戳字段的值需要保持为 UNIX 时间戳。
所以问题分为两部分。
- 如何在不破坏 UNIX 时间戳的情况下将时间戳文件转换为
YYYY-MM-dd
?
- 如何将
YYYY-MM-dd
值应用于索引?
这是我目前所拥有的。
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}"
}
}
我已经进行了几次不同的 grok 尝试,但到目前为止都没有成功。
只需像这样更改您的 date
过滤器,它就会起作用。您在 date
过滤器中使用的模式应该与您正在解析的字段的模式匹配,因为您有纪元秒,那么模式应该是 UNIX
:
date {
match => ["timestamp", "UNIX"]
target => "@timestamp"
}
请注意,您可能需要在 csv
过滤器中添加 convert
设置,以确保 timestamp
字段为整数
csv {
...
convert => { "timestamp" => "integer" }
}
我需要根据 UNIX 时间戳(自纪元以来的秒数)字段的值对记录进行索引,但是索引需要采用 YYYY-MM-dd
的形式。但是,时间戳字段的值需要保持为 UNIX 时间戳。
所以问题分为两部分。
- 如何在不破坏 UNIX 时间戳的情况下将时间戳文件转换为
YYYY-MM-dd
? - 如何将
YYYY-MM-dd
值应用于索引?
这是我目前所拥有的。
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}"
}
}
我已经进行了几次不同的 grok 尝试,但到目前为止都没有成功。
只需像这样更改您的 date
过滤器,它就会起作用。您在 date
过滤器中使用的模式应该与您正在解析的字段的模式匹配,因为您有纪元秒,那么模式应该是 UNIX
:
date {
match => ["timestamp", "UNIX"]
target => "@timestamp"
}
请注意,您可能需要在 csv
过滤器中添加 convert
设置,以确保 timestamp
字段为整数
csv {
...
convert => { "timestamp" => "integer" }
}