Я отвечаю на свой вопрос.
Возможно, сработал swatch, но мне не удалось заставить модуль perl Sys :: Syslog работать на хосте, а установленный на хосте / usr / bin / logger не поддерживает запись на удаленный сервер (util-linux-ng- 2.17.2).
Итак, первым делом я скачал исходный код для util-linux-2.20.1, для которого программа logger поддерживает удаленную регистрацию. После тестирования стало очевидно, что существует ограничение на количество символов, разрешенных в строке журнала. Копаясь в исходном коде, я обнаружил жестко заданный предел в 400 символов. (Если вы мне не верите, запустите «strings / usr / bin / logger | grep 400» в любой системе Linux).
Это ограничение неприемлемо для ведения журнала Apache-типа (включая nodejs), поэтому я изменил код и увеличил ограничение до 4096. Пока я работал, я также добавил новый параметр командной строки, который позволяет вставлять необязательный параметр. текстовая строка в начале каждой строки журнала. Я сделал это, потому что журналы nodejs не включают имя хоста, как можно было бы увидеть в apache.
На этом этапе я мог запустить скрипт оболочки с «tail -F -n 0 [logfile] | ./modified_logger ....», и это сработало. Но у меня были некоторые опасения по поводу запуска этого из supervise (daemontools) или даже в фоновом режиме, потому что, если одна или другая сторона трубы завершается, существует риск, что вся труба завершится. У меня также были проблемы (хотя и не проверенные) по поводу производительности.
поэтому я решил объединить хвостовую функциональность с функциональностью регистратора в один исполняемый двоичный файл, который бы исключал необходимость использования Unix-каналов или внешних программ. Я сделал это, взломав tail.c из gnu coreutils и включив то, что мне нужно, в модифицированную программу регистрации.
В результате получается новый двоичный файл (размером 117 КБ), который я называю «filelogger» и который непрерывно отслеживает один или несколько файлов и записывает каждую новую строку в локальный или удаленный системный журнал, через UDP или TCP. Работает как часы. Я смог выполнить небольшой тест, и он занял около 17 000 строк (1,8 МБ) за 3 секунды в подсетях с помощью vlan и нескольких физических коммутаторов между ними на удаленном сервере с syslog-ng.
чтобы запустить программу, вы должны сделать что-то вроде следующего (на переднем плане, в фоне или под наблюдением daemontools):
./filelogger -t 'access' -d -p local1.info -n [удаленный хост-логин] -u / tmp / игнорируется -a $ (имя хоста) / tmp / myfile1 / tmp / myfile2 ...
/ tmp / myfile1 и / tmp / myfile2 - это отслеживаемые файлы.
«-A» - это новая опция, которую я добавил. В этом случае я вставляю локальное имя хоста в начале каждой строки журнала.
Это решение было именно тем решением, которое я искал, когда задавал вопрос, и, как оказалось, не существовало, пока я не сделал это сам. :)