【问题标题】:How to import zipped json into elasticsearch using logstash?如何使用logstash将压缩的json导入elasticsearch?
【发布时间】:2017-04-03 08:32:22
【问题描述】:

我正在尝试使用 logstash 将数据导入 elasticsearch。数据为压缩格式,因为它是一个大数据。
到目前为止,这是我尝试过的:

input {
  file {
    path => "C:/Users/lenovo-pc/Desktop/test.zip"
    start_position => "beginning"
    type=> "mytest"
    codec => "gzip_lines"
  }       
}

filter {
  json { source => "message" }
}

output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "testing"
  }
  stdout { codec => rubydebug }
}

我在运行logstash -f import.conf 后得到的,在这里:

Could not find log4j2 configuration at path /Bitnami/elk-5.2.2-0/logstash/config/log4j2.properties. Using default config which logs to console
13:53:11.640 [main] FATAL logstash.runner - An unexpected error occurred! {:error=>#<ArgumentError: Could not coerce (9600-9700) into a port range>, :backtrace=>["C:/Bitnami/elk-5.2.2-0/logstash/logstash-core/lib/logstash/settings.rb:352:in `coerce'", "C:/Bitnami/elk-5.2.2-0/logstash/logstash-core/lib/logstash/settings.rb:237:in `set'", "C:/Bitnami/elk-5.2.2-0/logstash/logstash-core/lib/logstash/settings.rb:61:in `set_value'", "C:/Bitnami/elk-5.2.2-0/logstash/logstash-core/lib/logstash/settings.rb:80:in `merge'", "org/jruby/RubyHash.java:1342:in `each'", "C:/Bitnami/elk-5.2.2-0/logstash/logstash-core/lib/logstash/settings.rb:80:in `merge'", "C:/Bitnami/elk-5.2.2-0/logstash/logstash-core/lib/logstash/settings.rb:115:in `validate_all'", "C:/Bitnami/elk-5.2.2-0/logstash/logstash-core/lib/logstash/runner.rb:210:in `execute'", "C:/Bitnami/elk-5.2.2-0/logstash/vendor/bundle/jruby/1.9/gems/clamp-0.6.5/lib/clamp/command.rb:67:in `run'", "C:/Bitnami/elk-5.2.2-0/logstash/logstash-core/lib/logstash/runner.rb:183:in `run'", "C:/Bitnami/elk-5.2.2-0/logstash/vendor/bundle/jruby/1.9/gems/clamp-0.6.5/lib/clamp/command.rb:132:in `run'", "C:\\Bitnami\\elk-5.2.2-0\\logstash\\lib\\bootstrap\\environment.rb:71:in `(root)'"]}  

请帮我解决这个问题。

我的 test.zip 文件示例:Check here

【问题讨论】:

  • 你能分享一个简单的文件,我可以试试。我怀疑问题不是来自 zip 文件。
  • @asettouf 好的,让我编辑共享示例的问题。
  • 请检查已编辑的问题
  • 您可以尝试使用简单的标准输入来代替吗?我想知道这是由您的设置引起的还是实际上是由 zip 文件引起的。
  • 我该怎么做? stdin 我想不要将文件作为输入。

标签: json elasticsearch logstash


【解决方案1】:

gzipzip 是两种不同的压缩方式。 gzip 格式仅支持单个文件,而 zip 是容器格式。 logstash 没有邮政编码。您需要另一个编解码器来指定 zip 文件中文件的编解码器,而 logstash 对此没有概念。在 S3 输入上有一个 JIRA 支持它,但它仍然处于打开状态。

要处理.zip 文件中的文件,您将不得不依赖logstash 外部的东西来为您提取文件,然后使用file 输入来处理提取的文件。

【讨论】:

  • 在这种情况下,使用 unzip -c archive.zip file1.txt file2.txt 和 Logstash 的 exec 插件应该可以工作(尽管在 Linux 操作系统上),不是吗?
  • @asettouf 请原谅我!.. 我不明白。你是说我需要在我的logstash 配置文件中写入unzip,然后将其导入elasticsearch。这是你的背景吗?
  • @JafferWilson 您可以使用 exec 插件解决此限制,请参阅我的回答
【解决方案2】:

为@Alcanzar 的答案添加一点,因为您不能直接使用 gzip 插件,这是一种解决方法(仅在 Linux 操作系统上,它可能与支持解压缩的 Windows 上的 Cygwin 或 Git bash 等命令行工具一起使用命令)将使用exec plugin 将存档文件解压缩到标准输出,这是一个简单的测试,带有以下配置:

input {
  exec  {
    command => "unzip -q -c tt.zip"
    interval => 10
  }
}

output {
  stdout { codec => rubydebug }
}

一个 zip 文件包含 2 个文本文件,其中一行包含 (hello world 1 和 hello world 2) 给我们输出:

{
       "message" => "hello world 1\nhello world 2\n",
      "@version" => "1",
    "@timestamp" => "2017-04-04T08:04:56.024Z",
          "host" => "de0-vsiaas-1129",
       "command" => "unzip -q -c tt.zip"
}

这绝对是可行的,尽管通过一些变通方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    • 2023-03-14
    • 2017-12-01
    相关资源
    最近更新 更多