【问题标题】:Generate multiple types with multiple csv使用多个 csv 生成多种类型
【发布时间】:2021-05-01 00:57:49
【问题描述】:

我正在尝试根据各种 csv 在同一索引中生成各种类型。由于我不知道 csv 的数量,因此为每个输入进行输入将是不可行的。 那么有谁知道如何使用文件名生成类型,并在其中分别引入 csv?

input {
  file {
    path => "/home/user/Documents/data/*.csv"
    start_position => "beginning"
    sincedb_path => "/dev/null"
  } 
}


filter { 
    
    csv {
        separator => ","
        skip_header => "true"
        autodetect_column_names => true
        autogenerate_column_names => true
    }
}

output {
   elasticsearch {
     hosts => "http://localhost:9200"
     index => "final_index"

  }

stdout {}

}

非常感谢

【问题讨论】:

    标签: elasticsearch logstash


    【解决方案1】:

    自第 6 版以来,Elasticsearch 索引中已删除同一索引中的多个文档结构,如果文档看起来与索引模板化的方式不同,它将无法将数据发送给它,你可以要做的是确保所有字段都是已知的,并且您有一个包含所有可能字段的通用模板。

    您是否有理由将所有这些都放在一个索引中?

    如果是用于查询目的或 Kibana,请知道您可以在搜索时使用通配符,并且有 Kibana 的模式。

    评论后更新:

    使用过滤器通过 grok 提取文件名

    filter {
      grok {
        match => ["path","%{GREEDYDATA}/%{GREEDYDATA:filename}\.csv"]
      }
    }
    

    并像这样在输出中使用文件名:

    elasticsearch {
       hosts => "http://localhost:9200"
       index => "final_index-%{[filename]}"
    }
    

    【讨论】:

    • 我想要做的是自动保存那些 csv 中的数据。我不介意它们是在同一个索引中还是在不同的索引中。在这种情况下,如果这些索引与 csv 文件名一起保存,我不在乎它们是否保存在不同的索引中。换句话说,每个文件都有一个索引 (.csv)。
    • 根据您的反馈用一些 sn-ps 更新了我的答案
    • 好的,再次感谢。有一件事要提:当我使用该代码时,它运行良好,但索引的名称没有改变,我认为这是因为我收到以下错误"_grokparsefailure"。 :´(
    • 这意味着模式与路径存在问题,你能给我一个"_grokparsefailure"发生的路径示例吗?
    • 要回答这个问题,这是因为这是 csv 过滤器插件的一般工作方式,因为它会记住在该管道中看到的第一个事件时的字段名。如果您想将其分开,则使用自动检测的唯一方法是为您可以拥有的每个文件名使用单独的管道,或者您可以根据文件名创建不同的 csv 过滤器(如果事先知道...)
    猜你喜欢
    • 1970-01-01
    • 2018-07-29
    • 2017-12-29
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 2015-01-08
    • 2014-07-20
    相关资源
    最近更新 更多