Ich muss den Wert eines UNIX-Timestamp-Felds auf @timestamp
schreiben, damit ich Daten, die durch logstash fließen, korrekt indizieren kann, ich habe diesen Teil funktioniert. Allerdings habe ich auch die Anforderung, dass der Wert @timestamp
die Einfügezeit sein sollte. Zu diesem Zweck habe ich ein temporäres Feld erstellt, das den ursprünglichen Wert @timestamp
enthält.Schreiben in @timestamp in LogStash
Hier ist, was ich arbeite mit:
filter {
csv {
separator => " " # <- this white space is actually a tab, don't change it, it's already perfect
skip_empty_columns => true
columns => ["timestamp", ...]
}
# works just fine
mutate {
add_field => {
"tmp" => "%{@timestamp}"
}
}
# works just fine
date {
match => ["timestamp", "UNIX"]
target => "@timestamp"
}
# this works too
mutate {
add_field => {
"[@metadata][indexDate]" => "%{+YYYY-MM-dd}"
}
}
# @timestamp is not being set back to its original value
date {
match => ["tmp", "UNIX"]
target => "@timestamp"
}
# works just fine
mutate {
remove_field => ["tmp"]
}
}
output {
elasticsearch {
hosts => "elasticsearch:9200"
# this works
index => "indexname-%{[@metadata][indexDate]}"
}
}
Das Problem ist hier:
date {
match => ["tmp", "UNIX"]
target => "@timestamp"
}
@timestamp
wird wieder auf den ursprünglichen Wert nicht zu werden. Wenn ich die Daten überprüfe, hat es den gleichen Wert wie das Feld timestamp
.
Können Sie einfach entfernen Sie das 'target => ...' in der Regel die '@ timestamp' Das Feld wird standardmäßig ausgewählt. – Val
Ich habe es gerade erst probiert, zuerst im Problembereich dann an beiden Orten. '@ timestamp' enthält immer noch den Wert von' timestamp'. – robbmj