【问题标题】:Logstash convert output date formatLogstash 转换输出日期格式
【发布时间】:2020-02-28 14:18:53
【问题描述】:

我正在使用 logstash 从 mysql 获取数据并将它们传递给 elasticsearch。 不幸的是,日期格式默认解析为祖鲁时间。 需要获取日期时间格式的数据 像 yyyy-mm-dd H:i:s 没有 t 和 z。下面是我的logstash配置

jdbc {
jdbc_driver_library => "/etc/mysql/driver/mysql-connector-java-5.1.48/mysql-connector-java-5.1.48-bin.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://localhost:3306/db"
jdbc_user => root
jdbc_password => "secret"
tracking_column => "id"
use_column_value=> true
statement => "SELECT * FROM db.logs;"
schedule => " * * * * * *"
}

}

output {
elasticsearch {
document_id=> "%{id}"
document_type => "_doc"
index => "logs"
hosts => "http://localhost:9200"
sniffing => true
}

stdout{
codec => rubydebug
  }
}

filter {

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

在这种情况下,我收到了"_dateparsefailure"。 我也尝试使用 mutate gsub 和 convert 但没有成功。

现在,结果是"date" => "2020-02-28T09:18:18.000Z",但预期结果是2020-02-28 9:19:18

【问题讨论】:

    标签: mysql elasticsearch logstash


    【解决方案1】:

    日期过滤器很有用,但并不总是最好的选择。

    首先,您可以尝试使用此工具为您的日期找到正确的格式: https://esddd.herokuapp.com/

    如果它不适用于日期过滤器,则必须将模板添加到 elasticsaerch。

    为此,您必须创建一个像这样的 json 文件:

    {                                                                                                                                                                                                                  
        "index_patterns": [                                                                                                                                                                                            
          "YOUR INDEX PATTERN"                                                                                                                                                                                                                                                                                                                                                                                                   
        ],                                                                                                                                                                                                             
        "order": 0,                                     
        "mappings": {                                   
          "dynamic_templates": [                        
              {                                           
              "timestamp_fix": {                        
                "path_match": "THE NAME OF YOUR DATE FIELD",              
                "mapping": {                            
                  "type": "date",                       
                  "format": "FORMAT OF THE DATE YOU WANT"
                }                                       
              }                                         
            }                                           
          ]                                             
        }        
    

    然后你必须在logstash输出这个参数:

     template => "PATH TO YOUR JSON FILE"
     template_name => "template_fix"
     template_overwrite => true
    

    如这里的 logstash 文档中所述: https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html

    让我知道它是否有效!祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-24
      • 2017-12-23
      相关资源
      最近更新 更多