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

尼蒂什·库马尔

我有一个需要导入 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需要转换为日期格式的日期格式,elasticsearch可以分析
  • 由于我们正在持仓,因此可能会出现很多尾随空格,如何修剪这些空格。
  • 在某些情况下,例如一些列。Firstname/FName或者Lastname/LName可能包含特殊字符,例如+ - && || ! ( ) { } [ ] ^ " ~ * ? : \等,我怎样才能将那些与正则表达式匹配并插入到 elasticsearch 中。
JBone

好的,一种方法是将其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"] 
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用python从多个文本文件中提取数据

使用Pandas从文本文件中提取标题数据

使用bash从文本文件中提取数据

使用 for 循环从文本文件中提取数据

使用python从文本文件中提取数据

使用 logstash 将数据集导入 ElasticSearch 很慢

如何使用 Logstash 或 curl 向 ElasticSearch 提供数据?

使用Logstash将数据从Elasticsearch导出到CSV

如何使用logstash将Mysql数据迁移到elasticsearch

通过使用scala的logstash将数据批量插入elasticsearch

使用Logstash将数据流式传输到Amazon Elasticsearch?

将Logstash与MySQL和Elasticsearch结合使用,无法发送数据

使用Elasticsearch / Logstash / Kibana的数据库SQL

如何使用 Logstash 从 Elasticsearch 获取数据并将其放入 Graphite?

使用logstash从json中提取数字并发送到elasticsearch

使用Python从文本文件中提取数据并写入新文件

将JSON文件导入Logstash + Elasticsearch + Kibana

在使用 logstash 将数据从 MySQL 推送到 Elasticsearch 的同时摄取节点 Elasticsearch

使用正则表达式从文本文件中提取数据

如何使用Python从文本文件中提取特定数据并写入CSV

使用 numpy 从特定文本文件行中提取数据

在bash中使用grep命令从文本文件中提取数据时出错

使用Python从大型非结构化文本文件中提取数据元素

使用C ++ 98 Linux从文本文件中提取数据

如何使用步骤从文本文件中提取行?

使用PHP从文本文件中提取特定信息

使用PHP从文本文件中提取信息

使用Python从文本文件中提取数值

使用bash从ipmitool文本文件中提取值