首页 > 解决方案 > 如何在logstash中转换格式“yyyy-MM-dd HH:mm:ss

问题描述

我通过 Oracle 获取数据,数据库有一个字段 updated_at,格式为“ yyyy-MM-dd HH:mm:ss ”。但是,它在logstash 中已自动更改为ISO8601 格式。因此,我尝试更改格式“ yyyy-MM-dd HH:mm:ss ”,但出现类似 _dateparsefailure 的错误。这是我的配置文件。问题是什么?

input {
   jdbc {
        jdbc_validate_connection => true
        jdbc_driver_library => "/usr/share/logstash/logstash-core/lib/jars/ojdbc8.jar"
        jdbc_driver_class => "Java::oracle.jdbc.OracleDriver"
        jdbc_connection_string => <connection string>
        jdbc_user => <my username>
        jdbc_password => <my password>
        use_column_value => true
        statement => "SELECT * FROM IP_INFO"
        schedule => "*/1 * * * *"
        charset => "UTF-8"
        enable_metric => false
   }

}

filter {
    date {
        match => [
            "updated_at", "yyyy-MM-dd HH:mm:ss"
        ]
        target => "updated_at"
    }
}

output {
  stdout {
    codec => rubydebug
  }
}


结果

{
    "@timestamp" => 2020-10-14T07:34:03.755Z,
    "updated_at" => 2020-10-14T04:44:37.000Z,
    "tags" => [
        [0] "_dateparsefailure"
    ],
    "created_at" => 2020-09-29T15:56:37.000Z
}

所以,我只是将 updated_at 和 created_at 字段转换为“ yyyy-MM-dd HH:mm:ss ”。你能帮助我吗?

标签: logstash

解决方案


日期过滤器的用途是解析时间戳并生成 Elasticsearch 自动将其视为日期的 ISO8601 时间戳。其他任何内容都不会被标识为日期,因此您将无法在查询中将该字段视为日期。


推荐阅读