Ошибка динамического индекса Logstash из поля документа

Я все еще сталкиваюсь с проблемами, пытаясь понять, как сказать Logstash отправлять динамический индекс на основе поля документа. Кроме того, это Поле должно быть преобразовано, чтобы в самом конце получить «настоящий» индекс. Учитывая, что есть поле «время» (которое является отметкой времени UNIX). Это поле уже преобразовано с помощью фильтра «date» в объект DateTime для Elastic. Кроме того, он должен отображаться как индекс (ГГГГММ). Индекс НЕ должен быть производным от @Timestamp, который не затрагивается.

Пример: {..., "время": 1453412341, ...}

Пойдем в Индекс: 201601

Я использую следующий конфиг:

filter {
  date {
    match => [ "time", "UNIX" ]
    target => "time"
    timezone => "Europe/Berlin"
  }
}
output {
    elasticsearch {
        index => "%{time}%{+YYYYMM}"
        document_type => "..."
        document_id => "%{ID}"
        hosts => "..."
    }
}

К сожалению, это не работает. Есть идеи, как этого добиться?

Большое спасибо!


person Christoph Brosdau    schedule 21.01.2016    source источник


Ответы (2)


"% {+ YYYYMM}" указывает использовать значения даты из @timestamp. Если вам нужен индекс, названный после YYYYMM в% {time}, вам нужно сделать строку из этого поля даты, а затем ссылаться на эту строку в выходном разделе. Это может быть mutate {}, который сделает это или превратится в ruby ​​{}.

В большинстве случаев вы хотите установить @timestamp равным значению события. По умолчанию собственное время logstash не очень полезно (представьте, если бы ваши события были отложены на час во время обработки). Если вы это сделаете, то% {+ YYYYMM} "будет работать нормально.

person Alain Collins    schedule 21.01.2016

Это вызвано тем, что имя индекса по умолчанию создается на основе времени UTC.

person Gerardo Rochín    schedule 21.01.2016