2016-03-21 4 views
0

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

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

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

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

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

Если нет, перезаписывает ли сценарий как плагин с помощью logstash?

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

PS Я бегу на Windows Server, если это делает никакой разницы

ответ

1

простым способом было бы преобразовать двоичный формат в 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.

1

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

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

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

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

Есть много других способов подачи ввода на logstash , в том числе TCP/UCP входов или брокеров (кролика, Redis и т.д.), которые могут вписаться в ваш рабочий процесс.

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