【问题标题】:How to convert a string to data field in logstash filter plugin如何在 logstash 过滤器插件中将字符串转换为数据字段
【发布时间】:2017-10-17 16:05:50
【问题描述】:

我是 ELK 堆栈的新手。最近一周探索logstash和弹性搜索。我发现将时间戳(默认视为字符串类型)转换为日期类型字段有困难。 这个字符串“Thu May 18 06:39:44 CEST 2017”表示工具日志中的时间戳,希望使用 logstash 过滤器日期插件将此字符串转换为日期字段。我不知道怎么做。任何建议或帮助将不胜感激。谢谢 !

filter {    
 csv {     
    columns =>["Make","Color","Price","Sold"]     
    separator =>","       
 }       
date
{      
match => ["Sold", "DD-MM-YYYY"] #  Not sure how to match timestamp in log file to convert to date type.        
target => "Sold"      
}      
mutate{      
   convert => ["Price","float"]    
   }      
 }   

//假设我的 csv 文件包含以下日志。时间戳的最后一个字段 iPhone,silver,260,Thu Sep 07 11:05:07 CEST 2017

iPhone,gold,400,Thu Oct 07 12:05:07 CEST 2017

【问题讨论】:

  • 先展示你的一些努力。
  • 分享您的 logstash 配置文件。
  • @HatimStovewala 。感谢您的回复。请找到配置文件。
  • EEE MMM dd HH:mm:ss `CEST` yyyy 我没有测试过。请注意,EEE 和 MMM 取决于区域设置。

标签: elasticsearch logstash


【解决方案1】:

首先通过以下命令设置您的索引。 (...将其替换为您的其余列及其类型。请参阅 Elasticsearch Put Mapping

PUT date
{
  "mappings": {
    "date": {
      "properties": {
        ...,
        "TimeStamp": {
          "type": "date",
          "format": "EEE MMM dd HH:mm:ss zzz yyyy"
        },
        ...
      }
    }
  }
}

现在,您可以继续使用 logstash 将数据推送到 ES。从 logstash 配置文件中删除日期过滤器。 ES 会将字符串解析为日期。

注意:在使用示例数据对其进行测试时,我意识到 CEST 不被接受为时区。我想你需要用 CST 替换 CEST。这种解析存在一些问题,refer

如果时区在您的数据中固定为 CEST,那么您可以解决此问题:

PUT date
{
  "mappings": {
    "date": {
      "properties": {
        ...,
        "TimeStamp": {
          "type": "date",
          "format": "EEE MMM dd HH:mm:ss 'CEST' yyyy"
        },
        ...
      }
    }
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    • 2011-09-18
    相关资源
    最近更新 更多