【问题标题】:logstash remove_field not working in order to upload csv to elasticsearchlogstash remove_field 无法将 csv 上传到 elasticsearch
【发布时间】:2019-12-09 21:14:17
【问题描述】:

我正在使用 elasticsearch、kibana 和 logstash 6.0.1。

我希望通过 logstash 将 csv 数据上传到 elasticsearch 并删除字段(路径、@timestamp、@version、主机和消息)。我在下面显示 logstash.conf 和 emp.csv 文件。如果我不使用 remove_field 指令但我需要,上传将起作用。此外,没有创建索引。

logstash.conf:

input {

  file {
      path => "e:\emp.csv"
      start_position => "beginning"
  }
}
filter {
  csv {
      separator => ","
      columns => ["code","color"]
      remove_field => ["path", "@timestamp", "@version", "host", "message"]
  }

  mutate {convert => ["code", "string"]}
  mutate {convert => ["color", "string"]}

}
output {
  elasticsearch {
    hosts => "http://localhost:9200"
    index => "emp5"
    user => "elastic"
    password => "password"
  }
  stdout {}
}

emp.csv:

1,blue
2,red

在这种情况下缺少什么?

【问题讨论】:

    标签: elasticsearch logstash kibana


    【解决方案1】:

    在您的 csv 文件中,您尝试删除的数据不可用。

    改为尝试删除 pathhost 字段:

    (...)
    filter {
      csv {
          separator => ","
          columns => ["code","color"]
      }
        mutate {
          remove_field => ["path", "host"]
        }
    (...)
    

    另外,如果字段 path 和/或 host 不存在,则没有问题。如果字段存在插件将删除字段,如果字段不存在则什么都不做。

    编辑: 我已经在新鲜的elastic stack 上测试过它:

    您可以使用以下命令删除索引:

    curl -X DELETE "localhost:9200/emp5"
    

    另请注意,在您当前的配置中,logstash 只会读取一次文件。 您可以通过添加 sincedb_path => "/dev/null" 来更改该行为 或在Windows 情况下:sincedb_path => "NUL" 内:

    input {
        file {
               (...) # here
             }
    

    部分。

    然后在logstash 工作后验证结果:

    curl -X GET "localhost:9200/emp5?pretty"
    {
      "emp5" : {
        "aliases" : { },
        "mappings" : {
          "doc" : {
            "properties" : {
              "@timestamp" : {
                "type" : "date"
              },
              "@version" : {
                "type" : "text",
                "fields" : {
                  "keyword" : {
                    "type" : "keyword",
                    "ignore_above" : 256
                  }
                }
              },
              "code" : {
                "type" : "text",
                "fields" : {
                  "keyword" : {
                    "type" : "keyword",
                    "ignore_above" : 256
                  }
                }
              },
              "color" : {
                "type" : "text",
                "fields" : {
                  "keyword" : {
                    "type" : "keyword",
                    "ignore_above" : 256
                  }
                }
              },
              "message" : {
                "type" : "text",
                "fields" : {
                  "keyword" : {
                    "type" : "keyword",
                    "ignore_above" : 256
                  }
                }
              }
            }
          }
        },
        "settings" : {
          "index" : {
            "number_of_shards" : "5",
            "blocks" : {
              "read_only_allow_delete" : "true"
            },
            "provided_name" : "emp5",
            "creation_date" : "1576099826712",
            "number_of_replicas" : "1",
            "uuid" : "reXYzqPgQryYcASoov9l5A",
            "version" : {
              "created" : "6080599"
            }
          }
        }
      }
    }
    

    如您所见,没有 hostpath 字段。

    【讨论】:

    • 好的。我添加了 remove_field 来变异,但我得到了相同的结果。未创建索引。
    • @user3637971 你说你添加了它,但你是否也从csv过滤器中删除了它?
    • 我添加到 mutate 并从 csv 过滤器中删除。
    • @user3637971 我编辑了答案以进一步帮助您。
    • 是的,你是对的。它正在删除路径和主机。然后我将消息、时间戳和版本添加到 remove_field。添加 sincedb_path => "NUL" 是必要的。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-20
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多