csv - 使用Logstash选择性解析CSV文件

标签 csv logstash logstash-grok

我正在尝试通过logstash将数据从csv文件馈送到elasticsearch中。这些csv文件包含第一行作为列名。解析文件时,有什么特殊的方法可以跳过该行吗?我是否可以使用任何条件/过滤器,以便在发生异常的情况下可以跳至下一行?

我的配置文件如下所示:

input {  
      file {
          path => "/home/sagnik/work/logstash-1.4.2/bin/promosms_dec15.csv"
          type => "promosms_dec15"
          start_position => "beginning"
          sincedb_path => "/dev/null"
      }
}
filter {

    csv {
        columns => ["Comm_Plan","Queue_Booking","Order_Reference","Generation_Date"]
        separator => ","
    }  
    ruby {
          code => "event['Generation_Date'] = Date.parse(event['Generation_Date']);"
    }

}
output {  
    elasticsearch { 
        action => "index"
        host => "localhost"
        index => "promosms-%{+dd.MM.YYYY}"
        workers => 1
    }
}


我的csv文件的前几行看起来像

"Comm_Plan","Queue_Booking","Order_Reference","Generation_Date"
"","No","FMN1191MVHV","31/03/2014"
"","No","FMN1191N64G","31/03/2014"
"","No","FMN1192OPMY","31/03/2014"


无论如何,我可以跳过第一行吗?另外,如果我的csv文件以新行结尾,但里面没有任何内容,那么我也会收到错误消息。如果这些新行出现在文件末尾,或者两行之间是空行,我该如何跳过?

最佳答案

一种简单的方法是将以下内容添加到过滤器中(在csv之后,在ruby之前):

if [Comm_Plan] == "Comm_Plan" {
  drop { }
}


假定该字段通常不会与列标题具有相同的值,则该字段应能按预期工作,但是,可以使用以下命令来更具体地说明:

if [Comm_Plan] == "Comm_Plan" and [Queue_Booking] == "Queue_Booking" and [Order_Reference] == "Order_Reference" and [Generation_Date] == "Generation_Date" {
  drop { }
}


所有这一切将是检查该字段值是否具有该特定值,如果确实存在,则删除该事件。

关于csv - 使用Logstash选择性解析CSV文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27519974/

相关文章:

elasticsearch - 使用Elasticsearch + Logstash将汇总统计信息推送到Kafka

elasticsearch - 如何在不通过 tls 传递 -k 的情况下 curl elasticsearch kubernetes 运算符?

java - Logstash:有没有一种方法可以根据字段名称调用grok模板

python - 将一行拆分为多个单元格,并为每个基因保留第二个值的最大值

java - 创建基于 libreoffice 文本的数据源并使用 java 进行设置

c++ - 将 csv 文件中的值插入到 Qt 中的 vector 时出错

mysql - 将 mysql 中 CSV 列的值与更多检查进行比较

elasticsearch - 如何在 Kibana 中配置 Jira Dashboard

regex - Logstash grok过滤器标记接收和退回的邮件

用于具有任意属性值对的日志的logstash grok过滤器