2016-09-26 2 views
0

Ich verwende Fluentd, um einige Daten aus einer Reihe von Sensoren zu pushen. Die Daten, die ich dränge, enthalten ein "timestamp" -Feld (in Millisekunden), das ich in seinen Datumskomponenten (Jahr, Monat usw.) explodieren muss. Ich benutze einen Filter, um das zu tun, wenn Daten gepusht werden, so dass ich durch etwas Ruby-Code den Zeitstempel, z.fluentd Zuweisung von Typen zu neuen Feld im Filter

<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> 

mein Problem ist, dass die neuen Felder es werde in der json mit String-Typen zugeordnet nehmen, während für einige der ich streng ganzen Zahlen müssen (zum Beispiel für das Jahr, Monthnumber, daynumber, usw.) . Gibt es irgendeinen Weg, um flüssig zu sagen, dass diese Felder als ganze Zahlen hinzugefügt werden müssen?

Ich habe versucht, mit:

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

aber es hat nicht funktioniert.

Antwort

0

Entsprechend der documentation here können Sie die Option auto_typecast true verwenden, die für jedes Feld den im Ruby-Code definierten Typ zuweist.