Logstash Un-gzip阵列日志配置

时间:2018-11-22 16:17:22

标签: elasticsearch logstash logstash-configuration

大家! 我有logstash配置,该配置将日志从RabbitMQ转发到elasticSearch。像这样:

input {
    rabbitmq {
        ...
    }
}

filter {
    if [type] == "rabbitmq" {
        json {
            source => "message"
            target => "message"
        }
    }
}

output {
  elasticsearch {
    hosts => ["${ES_HOST}"]
    user => "${ES_USERNAME}"
    password => "${ES_PASSWORD}"
    sniffing => false
    index => "kit_events-%{[message][elasticsearch][index]}"
  }
}

我们被迫即时压缩日志,因为它们消耗了太多流量。 日志被移入数组并压缩。 配置解压缩并将数组拆分回对象的正确方法是什么?

我做了一些研究,发现有gzip_lines插件和Ruby(?)上的某些东西可以解析数组,但是我未能实现它。有人做过这样的事吗?

UPD:

添加了此过滤器

filter {

  if [type] == "kitlog-rabbitmq" {
    ruby {
      init => "
        require 'zlib'
        require 'stringio'
      "
      code => "
        body = event.get('[http][response][body]').to_s
        sio = StringIO.new(body)
        gz = Zlib::GzipReader.new(sio)
        result = gz.read.to_s
        event.set('[http][response][body]', result)
      "
    }
  }
}

现在发现错误

ERROR][logstash.filters.ruby    ] Ruby exception occurred: not in gzip format
[DEBUG][logstash.pipeline        ] output received {"event"=>{"@timestamp"=>2018-11-30T09:16:19.127Z, "tags"=>["_rubyexception"], "@version"=>"1", "message"=>"x^\\x8B\\xAEV*\\xCE\\xCE\\xCC\\xC9)V\\xB2R\\x88V\\xD26T07\\xB7\\xB0\\xB4\\xB44000W\\x8A\\xD5QPJ\\xCE\\xCF+IL.\\u0001\\xCA*)\\u0001\\xB9\\xA9\\xB9\\x89\\x999 N\\x96C\\x96^r~.X,\\xA5\\u0014(R\\xADT\\x9A\\u000E6#\\xA0\\xB2$#?\\u000F\\xAC\\xB9\\u0000\\\"\\xE2\\u001C\\xAC\\u0014[\\v\\xE4\\xE6%概\\xF4z\\u0001\\xE9b%\\xA0\\xC8\\xC0\\xD9\\u001D\\v\\u0000\\u0003\\x9ADk", "type"=>"kitlog-rabbitmq"}}

尝试使用不同的gzip压缩方法,但结果仍然相同。还尝试更改输入编解码器(普通-utf-8,普通-二进制)

1 个答案:

答案 0 :(得分:1)

那么,rabbitmq中的内容会压缩吗?

在所有可能的情况中,logstash会看到<table border="1"> <tr> <td id="Group1"></td> </tr> <tr> <td id="Group2"></td> </tr> <tr> <td id="Group3"></td> </tr> </table> <script> var entry = [ ["Group1","AAAAAAAAAAAAA"], ["Group2","BBBBBBBBBBBBB"], ["Group2","CCCCCCCCCCCCC"], ["Group3","DDDDDDDDDDDDD"], ["Group3","EEEEEEEEEEEEE"], ["Group3","FFFFFFFFFFFFF"], ] entry.forEach( function myFunction(item, index){ var x = document.getElementById(item[0]); var y = document.getElementById(item[0]).textContent.length; if(x !== null) { if(y < 1) { x.innerHTML += item[1]; } else{ x.innerHTML += '<hr>' + item[1]; } } }); </script>标头并为您解压缩,但是plugin似乎并没有做任何事情。您可以request使用该功能。

该插件确实允许您访问标头,因此您可以自己进行gzip。像这样:

content-encoding

使用ruby exist elsewhere解压缩字符串的示例。希望'zip'宝石可以在logstash中使用。