0

Мне нужно записать значение поля метки времени UNIX в @timestamp, чтобы я мог правильно индексировать данные, проходящие через logstash, у меня эта часть работает. Однако у меня также есть требование, чтобы значение @timestamp было временем вставки. С этой целью я сделал временное поле, которое имеет @timestamp с первоначальным значением.Запись на @timestamp в LogStash

Вот что я работаю с:

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]}" 
    } 
} 

Проблема здесь:

date { 
    match => ["tmp", "UNIX"] 
    target => "@timestamp" 
} 

@timestamp это не вернется к своему исходному значению. Когда я проверяю данные, он имеет то же значение, что и поле timestamp.

+0

Вы можете просто удалить 'цель => ...' обычно '@ timestamp' поле будет выбрано по умолчанию. – Val

+0

Я только что попробовал, сначала в проблемной области, затем в обоих местах. '@ timestamp' по-прежнему сохраняет значение' timestamp'. – robbmj

ответ

2

При добавлении даты tmp, он будет добавлен в формате ISO8601, так что вам нужно использовать:

date { 
    match => ["tmp", "ISO8601"] 
    target => "@timestamp" 
} 
+0

Молодцы, @Alcanzar! – Val

Смежные вопросы