Вывод 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 }
}