передать пользовательский двоичный формат в logstash

У меня есть несколько ежемесячных двоичных файлов журнала, которые я хотел бы отправить в logstash (или, возможно, в fluentd).

Проблема, с которой я сталкиваюсь, заключается в том, что (TTBOMK) файлы bin не читаются logstash, поэтому мне понадобится один из них.

Какой из этих вариантов является лучшим способом чтения пользовательского файла bin в logstash?

  • прочитать файл журнала через скрипт, который у меня есть в nodejs
  • переписать скрипт как плагин к logstash
  • «перевести» двоичные файлы журнала в читаемые текстовые копии
  • или каким-то другим способом, о котором я не знаю

Я настроил js-скрипт на основе nodejs, который может читать двоичный файл и создавать удобочитаемую текстовую версию документа. Его можно запустить как CLI или службу http и возвращать только строки после заданного номера строки. Можно ли интегрировать это с logstash напрямую или косвенно (чтобы мне не пришлось переписывать код).

Если нет, стоит ли переписывать скрипт как плагин logstash?

Если вариант 1 не сработает, а вариант 2 потребует слишком много времени для реализации, я рассматриваю возможность создания текстовых версий. Из-за того, что размер результирующих документов составляет несколько ГБ, я хотел бы удалить файлы или, если возможно, части файла, которые уже были прочитаны. Есть ли способ получить отзыв от logstash о том, что уже было прочитано?

PS Я работаю на Windows Server, если это имеет значение


person Daniel    schedule 21.03.2016    source источник


Ответы (2)


Вы выбросили много деталей, так что, надеюсь, я все правильно понял.

Если у вас есть служба http, logstash имеет ввод http_poller, который может опросить.

Я бы не рекомендовал писать плагин для logstash. Вещи продолжают быстро меняться в этой экосистеме.

Создание простых текстовых файлов — самая простая идея с точки зрения logstash. Logstash не говорит вам явно, что он обработал файл, но вы можете найти его в реестре (в unix это файл с именем «.sincedb*», обычно в /var/lib/logstash, который содержит номер инода и смещение размера файла), чтобы увидеть, был ли файл обработан на 100%.

Существует множество других способов подачи входных данных в logstash, включая входные данные tcp/ucp или брокеров (rabbit, redis и т. д.), которые могут вписаться в ваш рабочий процесс.

Конечно, во всем этом могут быть предостережения, связанные с Windows.

person Alain Collins    schedule 21.03.2016

Самый простой способ - преобразовать двоичный формат в json и передать его в logstash. Либо через файл, либо какой-то другой механизм. В первую очередь потому, что когда вы бросаете json в logstash, конфигурация фильтра предельно проста:

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

который разобьет для вас документ json на поля, включая документы, вложенные в json. Я рекомендую подавать это через сокет, а не через файлы, если мы говорим о больших объемах, поскольку из коробки не поддерживается какое-либо уведомление, когда файл «сделан». Таким образом, ваше определение ввода может выглядеть так:

tcp {
    port => 4567
    type => "my_json_type"
}

Который откроет прослушивающий сокет на порту 4567 и будет обрабатывать каждую полученную строку как строку, и далее фильтр будет соответствующим образом обрабатывать ее как документ json. Затем в вашем node.js вы можете избавиться от журналов, которые вы уже отправили в logstash.

person Tymoteusz Paul    schedule 21.03.2016