Sto rispondendo alla mia domanda.
swatch potrebbe aver funzionato, ma non sono riuscito a far funzionare il modulo Sys :: Syslog di perl sull'host e il / usr / bin / logger installato sull'host non supporta la registrazione sul server remoto (util-linux-ng- 2.17.2).
Quindi, la prima cosa che ho fatto è stato scaricare il codice sorgente per util-linux-2.20.1 per il quale il programma logger supporta la registrazione remota. Al momento del test, è emerso che esiste un limite imposto al numero di caratteri consentiti sulla riga di registro. Scavando nel codice sorgente ho trovato un limite di 400 caratteri codificato. (Se non mi credi, esegui "stringhe / usr / bin / logger | grep 400" su qualsiasi sistema Linux).
Questo limite non è accettabile per il tipo di registrazione apache (compresi nodejs), quindi ho modificato il codice e aumentato il limite a 4096. Mentre ero lì, ho anche aggiunto una nuova opzione da riga di comando che consente di inserire un facoltativo stringa di testo all'inizio di ogni riga del registro. L'ho fatto perché i log di nodejs non includono il nome host come si potrebbe vedere in apache.
A questo punto, ho potuto eseguire uno script di shell con "tail -F -n 0 [logfile] | ./modified_logger ...." e ha funzionato. Ma avevo delle preoccupazioni su come eseguire questo da supervisione (daemontools) o anche in background, perché se l'uno o l'altro lato del tubo termina, allora c'è il rischio che l'intero tubo finisca. Ho anche avuto preoccupazioni (anche se non testate) per le prestazioni.
così ho deciso di combinare la funzionalità tail con la funzionalità logger in un unico binario eseguibile che avrebbe aggirato la necessità di usare pipe Unix o programmi esterni. L'ho fatto hackerando tail.c da gnu coreutils e incorporando ciò di cui ho bisogno nel programma di logger modificato.
Il risultato è un nuovo binario (dimensione 117k) che chiamo "filelogger" e che monitora continuamente uno o più file e registra ogni nuova linea in un syslog locale o remoto, tramite UDP o TCP. Esso funziona magicamente. Sono stato in grado di fare un po 'di benchmarking e registra circa 17.000 linee (1,8 MB) in circa 3 secondi attraverso le sottoreti con un vlan e un paio di switch fisici tra loro, su un server remoto che esegue syslog-ng.
per eseguire il programma fai qualcosa di simile al seguente (in primo piano, in background o supervisionato da demoni):
./filelogger -t 'access' -d -p local1.info -n [loghost remoto] -u / tmp / ignorato -a $ (nome host) / tmp / myfile1 / tmp / myfile2 ...
/ tmp / myfile1 e / tmp / myfile2 sono i file monitorati.
"-A" è la nuova opzione che ho aggiunto. In questo caso, inserisco il nome host locale all'inizio di ogni riga di registro.
Questa soluzione era esattamente il tipo di soluzione che stavo cercando quando ho posto la domanda e, come si è scoperto, non esisteva fino a quando non l'ho fatta io. :)