Plugins logstash(2.3.2)gzip编解码器不工作

Plugins logstash(2.3.2)gzip编解码器不工作,plugins,logstash,codec,Plugins,Logstash,Codec,我使用logstash(2.3.2)通过使用gzip_行编解码器来读取gz文件。 日志文件示例(sample.log)为 我用来附加到gz文件的命令是: cat sample.log | gzip -c >> s.gz logstash.conf是 input { file { path => "./logstash-2.3.2/bin/s.gz" codec => gzip_lines { charset => "ISO-8859-1"}

我使用logstash(2.3.2)通过使用gzip_行编解码器来读取gz文件。 日志文件示例(sample.log)为

我用来附加到gz文件的命令是:

cat sample.log | gzip -c >> s.gz
logstash.conf是

input { 
  file {
    path => "./logstash-2.3.2/bin/s.gz"
    codec => gzip_lines { charset => "ISO-8859-1"}
  }
}

filter {
  grok {
    match => { "message" => "%{COMBINEDAPACHELOG}" }
    #match => { "message" => "message: %{GREEDYDATA}" }
  }
  #date {
  #  match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
  #}
}


output {
  stdout { codec => rubydebug }
}
我已经用bin/logstash插件安装了gzip_行插件安装了logstash-codec-gzip_行

使用./logstash-f logstash.conf启动logstash

当我给s.gz喂食时 cat sample.log | gzip-c>>s.gz

我希望控制台打印数据。但是没有打印出来

我已经在mac和ubuntu上试过了,得到了同样的结果。
我的代码有什么问题吗?

我检查了代码中的
gzip\u行
,很明显这个插件不起作用。至少对于版本2.3.2。可能是过时了。因为它没有实现此处指定的方法:

所以目前的内部工作是这样的:

  • 文件
    输入插件逐行读取文件并将其发送到编解码器
  • gzip_行
    codec尝试使用gzip读取器.new(io)创建新的gzip读取器对象
  • 然后逐行遍历读卡器以创建事件
因为您指定了一个gzip文件,
file
input插件尝试将gzip文件作为常规文件读取,并将行发送到编解码器。编解码器试图用该字符串创建GzipReader,但失败了

您可以将其修改为如下方式:

创建包含gzip文件列表的文件:

-- list.txt
/path/to/gzip/s.gz 
将其交给文件输入插件:

file {
    path => "/path/to/list/list.txt"
    codec => gzip_lines { charset => "ISO-8859-1"}
}
变化如下:

打开
vendor/bundle/jruby/1.9/gems/logstash-codec-gzip_-lines-2.0.4/lib/logstash/codec/gzip_-lines.r
文件。添加
寄存器
方法:

public
def register
  @converter = LogStash::Util::Charset.new(@charset)
  @converter.logger = @logger
end
在方法
decode
change中:

@decoder = Zlib::GzipReader.new(data)
作为


这种方法的缺点是它不会跟踪gzip文件,而是跟踪列表文件。所以您需要创建一个新的gzip文件并将其附加到列表中。

我遇到了一个类似的问题,我需要将文件中的字节解码为中间字符串,以准备只接受字符串的进程输入

Pyhton 2中忽略编码/解码问题的事实实际上是非常糟糕的IMHO。您可能最终会遇到各种损坏的数据问题,尤其是当您需要将字符串重新编码回数据时

使用ISO-8859-1同样适用于gz和文本文件。而utf-8仅适用于文本文件。我还没有试过png的

这是一个对我有用的例子

        data = os.read(src, bytes_needed)
        chunk += codecs.decode(data,'ISO-8859-1')
        # do the needful with the chunk....
@decoder = Zlib::GzipReader.open(data)
        data = os.read(src, bytes_needed)
        chunk += codecs.decode(data,'ISO-8859-1')
        # do the needful with the chunk....