Я использую 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"))}
, но это не сработало.