【问题标题】:Logstash parsing different line than 1st line as headerLogstash解析与第一行不同的行作为标题
【发布时间】:2020-12-25 18:37:08
【问题描述】:

我有一个样本数据:

employee_name,user_id,O,C,E,A,N
Yvette Vivien Donovan,YVD0093,38,19,29,15,36
Troy Alvin Craig,TAC0118,34,40,24,15,34
Eden Jocelyn Mcclain,EJM0952,20,37,48,35,34
Alexa Emma Wood,AEW0655,25,20,18,40,38
Celeste Maris Griffith,CMG0936,36,13,18,50,29
Tanek Orson Griffin,TOG0025,40,36,24,19,26
Colton James Lowery,CJL0436,39,41,27,25,28
Baxter Flynn Mcknight,BFM0761,42,32,28,17,22
Olivia Calista Hodges,OCH0195,37,36,39,38,32
Price Zachery Maldonado,PZM0602,24,46,30,18,29
Daryl Delilah Atkinson,DDA0185,17,43,33,18,25

logstash 配置文件为:

input {
  file {
    path => "/path/psychometric_data.csv"
    start_position => "beginning"
  }
}
filter {
  csv {
      separator => ","
      autodetect_column_names => true
      autogenerate_column_names => true
  }
}
output {
    amazon_es {
       hosts => [ "https://xxx-xxx-es-xxx.xx-xx-1.es.amazonaws.com:443" ]
       ssl => true
       region => "ap-south-1"
       index => "psychometric_data"
    }
}

我期待第一行(即employee_name、user_id、O、C、E、A、N)作为 Elasticsearch 字段名称(标题),但我得到第三行(即 Troy Alvin Craig,TAC0118,34,40 ,24,15,34) 作为标题如下。

 {
        "_index": "psychometric_data",
        "_type": "_doc",
        "_id": "md4hm3YB8",
        "_score": 1,
        "_source": {
          "15": "21",
          "24": "17",
          "34": "39",
          "40": "37",
          "@version": "1",
          "@timestamp": "2020-12-25T18:20:00.759Z",
          "message": "Ishmael Mannix Velazquez,IMV0086,22,37,17,21,39\r",
          "path": "/path/psychometric_data.csv",
          "Troy Alvin Craig": "Ishmael Mannix Velazquez",
          "host": "xx-ThinkPad-xx",
          "TAC0118": "IMV0086"
        }
 }

可能是什么原因?

【问题讨论】:

    标签: elasticsearch logstash elk


    【解决方案1】:

    如果您将autodetect_column_names 设置为true,则过滤器interprets 将第一行视为列名。如果 pipeline.workers 设置为多个,则需要查看哪个线程首先设置列名。由于不同的工作人员正在处理不同的行,这意味着它可能不会使用第一行。您必须将 pipeline.workers 设置为 1。

    除此之外,java 执行引擎(默认启用)并不总是保留事件的顺序。在 logstash.yml 中有一个设置 pipeline.ordered 来控制它。在 7.9 中,如果 pipeline.workers 设置为 1,则保持事件顺序。

    你没有说你正在运行哪个版本。对于从 7.0(当 java_execution 成为默认值)到 7.6 的任何内容,修复方法是使用 logstash.yml 中的 pipeline.java_execution: false 或命令行上的 --java_execution false 禁用 Java 引擎。对于从 7.7 开始的任何 7.x 版本,确保 pipeline.ordered 设置为 auto 或 true(auto 是 7.x 中的默认值)。在未来的版本(可能是 8.x)中,pipeline.ordered 将默认为 false。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-17
      相关资源
      最近更新 更多