Logstash: как читать журналы, созданные по дате/времени

Наши серверы хранят файлы журналов в каталоге в соответствии с датой и временем в качестве имени файла. например:

/2015.08.21/01.23
/2015.08.21/01.24
/2015.08.21/01.25

где имена файлов следуют соглашению [часы].[минуты].

Как настроить Logstash для чтения из последнего файла (какова общая практика)?

  • 1-я попытка:

Я указал путь к:

path => ["/2015.08.21/*"]

Logstash открыл много файлов, пока источник журнала (linux) не позволил ему открывать новые файлы.

  • 2-я попытка:

Используйте rsync, чтобы скопировать все файлы и объединить их в один файл.

Однако у меня есть проблема с частичным файлом журнала, например, если текущий файл журнала 11.12, и он все еще записывается, у меня будут только частичные данные.

  • 3-я попытка:

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

  • Обновлять

Я попробовал 3-ю попытку, но вижу некоторые недостатки этого метода.

  1. Если Logstash потратит на обработку файла более 1 минуты, он не сможет обработать весь файл, поскольку символическая ссылка указывает на следующий файл.
  2. Последние 1 или 2 события могут быть не обработаны.

person janetsmith    schedule 21.08.2015    source источник
comment
Вероятно, проблема с форматированием SO, но вы имели в виду /*/* или **? Вы пытаетесь запустить это в первый раз (где есть старые файлы для обработки)?   -  person Alain Collins    schedule 21.08.2015
comment
Спасибо, Алена, за обнаружение ошибки форматирования.   -  person janetsmith    schedule 22.08.2015


Ответы (1)


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

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

Чтобы наверстать упущенное при начальном запуске, попробуйте установить шаблон на что-то меньшее, например:

path => ["/2015.08.21/01.*"]

который должен соответствовать только 60 файлам.

Вы также можете пересмотреть свой дизайн и использовать один файл в минуту; без дополнительной информации это кажется чрезмерным.

person Alain Collins    schedule 22.08.2015
comment
спасибо за предложение. Однако, если я запускаю logstash в 8 утра, мне нужно попробовать его с 01.*, 02.*, 03.*? Это будет немного работы. Я не контролирую политику журналов :( Я не разработчик. - person janetsmith; 26.08.2015
comment
Logstash предназначен для работы. Вы также можете создавать шаблоны, такие как 0[1-5]*. - person Alain Collins; 26.08.2015
comment
Logstash выдал мне ошибку разрешения на открытие файла, когда он читает 100-е файлы, я думаю, моя учетная запись позволяла читать только 100 файлов одновременно. И вы правы, Logstash следует оставить работающим. Я выполняю работу по проверке концепции, которую Logstash запускает на моем собственном ноутбуке, поэтому он не работает все время. - person janetsmith; 26.08.2015
comment
Попробуйте настроить ulimit, если у вас Linux. - person Alain Collins; 26.08.2015
comment
Я проверил ulimit на сервере журналов, это 65535. На самом деле я смонтировал каталог на свою машину с помощью sshfs. Итак, я предполагаю, что либо sshfs, либо моя учетная запись ssh имеют это ограничение на количество файлов. - person janetsmith; 27.08.2015