【问题标题】:Convert Number date to a String Date Field in Fluentd For Storing into Elasticsearch在 Fluentd 中将数字日期转换为字符串日期字段以存储到 Elasticsearch
【发布时间】:2020-12-01 01:42:34
【问题描述】:

我是 fluentd 的新手,并使用它来将数据摄取到 elasticsearch。我有一个名为 request_time 的字段,其值为:110820120501 作为格式 [ddmmyyHHMMSS] 的数字。如何将其转换为日期字段。

这是我写的,但它不起作用。任何帮助表示赞赏。

request_time 值示例:100820015642

    <filter>
        @type record_transformer
        enable_ruby true
        <record>
        request_time ${ require 'date'; DateTime.strptime('request_time', '%d%m%y%H%M%S')}
        </record>
    </filter>

我也尝试过以下方法:

    <filter>
        @type record_transformer
        enable_ruby true
        <record>
            time ${require 'date'; DateTime.parse('request_time').strftime('%d%m%y%H%M%S')}
        </record>
    </filter>

如何将 request_time 存储为转换为值的日期字段,例如。 "request_time": "2020-08-11T11:24:23.000+0100" ?

【问题讨论】:

  • “不起作用”是什么意思?解析示例请求时间值会产生预期的结果。
  • 当我使用第一个代码 sn-p 运行 td-agent 时出现此错误。 ``` fluent/log.rb:306:debug: map:{"%Q[request_time]"=>" require 'date'; DateTime.strptime('request_time', '%d%m%y%H%M %S')"} ``` 并给出值为:“request_time”=>“100820022014”}。但我正在寻找类似的输出:“2020-08-10T02:20:14.000+0100”
  • 使用以下方法让它工作:``` time "${require 'date'; DateTime.strptime(record['request_time'],'%d%m%y%H%M% S')}" ```

标签: ruby elasticsearch fluentd td-agent


【解决方案1】:

请尝试以下 sn-p。我给出了毫秒精度,但您可以根据需要随意削减。

<filter>
    @type record_transformer
    enable_ruby true
    <record>
    date ${Time.at(record['request_time'].to_i/1000, record['request_time'].to_i%1000*1000).utc.strftime('%Y-%m-%dT%H:%M:%S.%LZ')}
    </record>
</filter>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-08
    • 1970-01-01
    • 2011-11-28
    • 2015-04-27
    相关资源
    最近更新 更多