При использовании logstash указывайте @timestamp в документе как epoch-millis. - PullRequest
0 голосов
/ 25 января 2019

В PoC, который делается в нашем проекте, мы пытаемся использовать Logstash вместо нашего собственного модуля индексации на основе Java для передачи данных в ElasticSearch.Входящие данные JSON не имеют поля @timestamp.Поэтому при использовании Logstash это поле добавляется в формате ISO.Но у нас уже есть определенное отображение для этого индекса ES, и для этого требуется, чтобы мы выдавали @timestamp в формате epoch-millis.

Я пытался поиграть с фильтрами ruby, чтобы преобразовать @timestamp в эпоху.-миллис, но пока не повезло.Есть ли какой-нибудь способ, которым мы можем загружать записи в ES через Logstash, когда @timestamp находится в формате эпох-миллис?

Я использую logstash 6.5.4 и ES 6.2.2

Обновление : после опробования предложения в ответе мой файл conf выглядит следующим образом:

input { stdin { } }

filter {
    ruby {
        code => "
            epoch_ts = event.timestamp.time.localtime.strftime('%s').to_i
            event.set( 'epoch', epoch_ts  )
        "
    }
}

output {
    elasticsearch {
        hosts => ["localhost:9200"]
        index => "myindex"
        script_type => "inline"
        script => 'ctx._source.@timestamp = params.event.get("epoch")'
    }
    stdout { codec => rubydebug }
}

Но все равно это не работает.Значение @timestamp не меняется вообще.Теперь мне также нужно удалить это дополнительное поле epoch.

Ответы [ 2 ]

0 голосов
/ 31 января 2019

После долгого поиска в Интернете я, наконец, отказался от этого подхода. Вместо этого я заставил ES вернуть @timestamp в epoch_millis, используя этот docvalue_fields подход.

0 голосов
/ 25 января 2019

этот код рубина должен работать для вас:

ruby {
    code => "
        epoch_ts = event.timestamp.time.localtime.strftime('%s').to_f
        event.set( '@timestamp', epoch_ts  )
    "
}
...