使用 Logstash 从文本文件中提取数据并导入到 Elasticsearch

Extracting data from text file and import to Elasticsearch using Logstash

我有一个文本文件需要导入到我的 Elasticsearch 中。我的文本文件格式是:

1            ARsv200711042           Allen                         Alane                         
2            ARsv200711042           Allen                         Arthur                        
3            ARsv200711042           Allen                         Bernice                       
4            ARsv200711042           Allen                         Betty                         
5            ARsv200711042           Allen                         Brittany                      
6            ARsv200711042           Allen                         Bruce                         
7            ARsv200711042           Allen                         Carolyn                       
8            ARsv200711042           Allen                         Carolyn                       
9            ARsv200711042           Allen                         Chadderick                    
10           ARsv200711042           Allen                         Darlene                        

我需要获取仓位数据;例如,第一列是eMID,从第1位到第13位,我的StateSource在14-15位,CodeProducts在16-17位,依此类推。

所以我将 Logstash 配置如下:

input {
    file {
        path => "D:/sample/sample 500.txt"
        start_position => "beginning"
    }
}

filter {
    grok {
        match => { 
            "message" => [
                "(?<eMID>.{0,13})(?<StateSource>.{0,2})(?<CodeProducts>.{0,2})(?<AcquiredDate>.{0,8})(?<Uses>.{0,2})(?<Prefix>.{0,10})(?<LName>.{0,30})(?<FName>.{0,30})"
            ]
        }
    }
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "sample-data"
    #user => "elastic"
    #password => "changeme"
  }
}

我能够成功导入数据。我有以下问题:

好的,所以一种方法是将 20071104 分成四个部分 \d{4} 并将其分配给 y,然后将接下来的两位数 \d{2} 分配给 m,剩下的两位数 \d{2} 到 d 并框出一个日期对象

或者第二种方法是从字符串创建一个日期并使用该对象重新格式化,就像我在这个例子中所做的那样,假设 AcquiredDate 是 20071104

filter {
     
      ruby {
           code => '
                 date = Date.strptime(event.get("AcquiredDate"), "%Y%m%d")
                 event.set("new_time", date.strftime("%Y-%m-%d"))
           '
      }
      mutate {
         remove_field =>
                       ["host","@timestamp","sequence","message","@version"]
      }
 }

给你

{
    "AcquiredDate" => "20071104",
    "new_time" => "2007-11-04"
}

回答你的第二部分

使用类似这样的东西

mutate { 
  strip => ["field1withwhitespace", "field2withwhitespace"] 
}