【问题标题】:Cannot parse CSV file with Logstash无法使用 Logstash 解析 CSV 文件
【发布时间】:2026-01-08 23:50:02
【问题描述】:

我在使用 logstash 将 CSV 文件导入 ElasticSearch 以在 Kibana 中进行进一步处理时遇到问题。

这是我的 logstash 配置文件:

input {
    file {
        path => ["/absolute_path_to_file/export.csv"]
        start_position => beginning 
        ignore_older => 0 
        sincedb_path => "/dev/null"
    }
}
#filter {
#   csv {
#       columns => [
#           "id",
#           "cislo_smlouvy",
#           "zdroj",
#           "produkt",
#           "sjednani",
#           "datum_odeslani",
#           "cas_odeslani",
#           "pojistovna",
#           "tarif",
#           "pojistnik",
#           "telefon",
#           "predmet_pojisteni",
#           "rz",
#           "pocatek_pojisteni",
#           "rocni_pojistne",
#           "urgence",
#           "stav"
#       ]
#       separator => ";"
#       remove_field => ["message"]
#   }
#}
output {
#   elasticsearch {
#       hosts => "localhost:9200"
#       index => "smlouvy"
#   }
    stdout {
        codec => rubydebug
    }
}

还有我的 CSV 文件的摘录:

"id";"číslo smlouvy";"zdroj";"produkt";"sjednání";"datum odeslaní";"čas odeslání";"pojišťovna";"tarif";"pojistník";"pojistnik telefon";"předmět pojištění";"rz";"počátek";"roční pojistné";"urgence";"stav"
"114951";"6132681255";"SRO";"POV";;"1.6.2016";"12:28";"csob";"csob-2";"BB TEST";"721666333";"Škoda Favorit";"NENÍ";"2.6.2016 00:00";"4657,00";;"TEST"
"114950";;"POV";"POV";"VO Bukvicova";"1.6.2016";"12:16";"csob";"csob-2";"BB BB";"721000111";"BMW X3";"NENÍ";"3.6.2016 00:00";"5550,00";;"TEST"

我正在调用这个命令:
sudo logstash -f /absolute_path_to_file/logstash.conf --vebrose

输出如下:

starting agent {:level=>:info}
starting pipeline {:id=>"main", :level=>:info}
Settings: Default pipeline workers: 2
Registering file input {:path=>["/absolute_path_to_file/export.csv"], :level=>:info}
Starting pipeline {:id=>"main", :pipeline_workers=>2, :batch_size=>125, :batch_delay=>5, :max_inflight=>250, :level=>:info}
Pipeline main started

一段时间无所事事后,我将其关闭:

^CSIGINT received. Shutting down the agent. {:level=>:warn}
stopping pipeline {:id=>"main"}
Closing inputs {:level=>:info}
Closed inputs {:level=>:info}
Input plugins stopped! Will shutdown filter/output workers. {:level=>:info}
Pipeline main has been shutdown

可能相关的版本信息:

logstash 2.3.2
logstash-input-file (2.2.5)
logstash-filter-csv (2.1.3)
logstash-output-elasticsearch (2.6.2)
logstash-output-stdout (2.0.6)
logstash-codec-rubydebug (2.0.7)

我已经阅读了我能找到的所有文档,并尝试从 GitHub 复制大量 logstash.conf 示例,但没有成功。对我所缺少的有任何帮助吗?

【问题讨论】:

  • 如果我取消注释您的 csv 过滤器,我确实会从您的 CSV 文件中获得包含预期数据的正确输出。
  • 我没有。感觉配置是对的,好像是logstash本身的其他问题……
  • 您可能会尝试使用完全相同的标题和适当的重音等,看看是否会改变一些东西。
  • 我试过了,但没有帮助。我开始严重怀疑我的 logstash 安装,即使教程 apachelog 设置对我不起作用。我目前正在尝试使用 dockerized ELK 堆栈来查看它是否有帮助..
  • 刚在dockerized环境github.com/deviantony/docker-elk试过还是不行

标签: csv elasticsearch logstash elastic-stack logstash-configuration


【解决方案1】:

所以我终于找到了问题所在。它与输入的 CSV 文件一起使用。

CSV 文件有\r 用于换行,logstash 默认为\n

顺便说一句:您不能将\r 设置为logstash 文件输入过滤器配置中的分隔符,因此我必须将CSV 文件转换为带有\n 的文件

【讨论】:

  • 哦,很好。自从我从您的帖子中复制/粘贴后,我没有注意到。
  • 是的,我也没有。我讨厌我不得不花几个小时调试这样的问题。
  • 无论何时使用 MS 产品生成的文件,都要多加怀疑 ;-)