Logstash un-gzip конфигурация журнала массива - PullRequest
0 голосов
/ 22 ноября 2018

все!У меня есть конфиг logstash, который перенаправляет журналы из RabbitMQ вasticSearch.Примерно так:

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"}}

Пыталсяразные методы gzipping, но результат все тот же.Также попытался изменить входные кодеки (обычный - utf-8, простой - двоичный)

1 Ответ

0 голосов
/ 27 ноября 2018

То есть содержимое в rabbitmq разархивировано?

В лучшем из возможных миров logstash увидит заголовок content-encoding и разархивирует его для вас, но плагин не делаетКажется, я ничего не делаю с этим знанием.Вы можете запросить функцию.

Плагин позволяет вам получить доступ к заголовку, так что вы можете сделать gzip самостоятельно.Примерно так:

filter {
  if [@metadata][rabbitmq_properties][content-encoding] == "gzip" {
    ruby {
      ...
    }
  }
}

Примеры разархивирования строки с помощью ruby ​​ существуют в других местах .Надеемся, что самоцвет «zip» доступен в logstash.

...