簡體   English   中英

使用logstash選擇性解析csv文件

[英]Selective parsing of csv file using logstash

我正在嘗試通過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 { }
}

所有這些都是檢查字段值是否具有該特定值,如果具有,則刪除該事件。

嘗試這個:

  mutate {
      gsub => ["message","\r\n",""]
  }
  mutate {
      gsub => ["message","\r",""]
  }
  mutate {
      gsub => ["message","\n",""]
  }
  if ![message] {
      drop { }
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM