Вывод logstash mongodb и тип ISODate

У меня возникли проблемы при попытке преобразовать поле типа даты в формат mongoDB (ISODate).

У меня есть очередь RabbitMQ с сообщениями JSON внутри. Эти сообщения имеют свойство Date, например:

Date : "2014-05-01T14:53:34.25677Z"

Мой сервис logstash читает очередь RabbitMQ и внедряет сообщения в mongoDB.

Вот мой конфигурационный файл logstash:

input {
    rabbitmq  {
        ...
        codec => json
    }
}

output {

    mongodb {
        codec => json
        collection => "log"
        isodate => true
        database => "Test"
        uri => "mongodb://localhost:27017"
    }
}

Моя проблема в том, что мое свойство Date вставлено как строка, а не как Date. Как я могу сказать Logstash вставить мое поле Date как поле ISODate в mongoDB?

Спасибо

1 ответ

Решение

Вы должны использовать фильтр даты logstash, чтобы преобразовать строку в дату до ее вставки в MongoDB: http://logstash.net/docs/1.4.2/filters/date

Не знаю вашей полной схемы, но она должна выглядеть примерно так:

filter {   
  date {
    match => [ "Date", "ISO8601" ]   
    } 
}

Обратите внимание на использование "ISO8601", которое соответствует формату, который вы получаете, но вам, возможно, придется немного поиграться с ним. Когда вы тестируете это, я настоятельно рекомендую использовать опцию вывода stdout для тестовых прогонов, чтобы легко увидеть, что делается до вставки в MongoDB:

output {
  stdout { codec => rubydebug }
}
Другие вопросы по тегам