2016-09-26 6 views
0

Я использую fluentd для ввода некоторых данных из набора датчиков. Данные, которые я нажимаю, содержат поле «timestamp» (в миллисекундах), которое мне нужно взорвать в его компонентах даты (год, месяц и т. Д.). Я использую фильтр для этого, когда данные толкаются, так что через некоторый код ruby ​​я могу легко взорвать метку времени, например.fluentd присвоение типов новому полю в фильтре

<filter *> 
    @type record_transformer 
    enable_ruby 
    <record> 
    year ${Time.at(Integer(record['timestamp'])/1000.0).strftime("%Y")} 
    monthnumber ${Time.at(Integer(record['timestamp'])/1000.0).strftime("%-m")} 
    monthname ${Time.at(Integer(record['timestamp'])/1000.0).strftime("%B")} 
    daynumber ${Time.at(Integer(record['timestamp'])/1000.0).strftime("%-d")} 
    dayname ${Time.at(Integer(record['timestamp'])/1000.0).strftime("%A")} 
    hour ${Time.at(Integer(record['timestamp'])/1000.0).strftime("%-k")} 
    minutes ${Time.at(Integer(record['timestamp'])/1000.0).strftime("%-M")} 
    seconds ${Time.at(Integer(record['timestamp'])/1000.0).strftime("%-S")} 
    </record> 
</filter> 

моя проблема заключается в том, что новые поля он собирается включить в JSON присваиваются типы строк, в то время как для некоторых I строго нужно целые числа (например, за год, monthnumber, daynumber и т.д.) , Это там любой способ сказать fluentd, что это поле должно быть добавлено как целые числа?

Я попытался с:

year ${Integer(Time.at(Integer(record['timestamp'])/1000.0).strftime("%Y"))} 

, но это не сработало.

ответ

0

В соответствии с documentation here вы можете использовать опцию auto_typecast true, которая назначит тип, определенный внутри кода Ruby для каждого поля.

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

  • Нет связанных вопросов^_^