Saya menjawab pertanyaan saya sendiri.
swatch mungkin berhasil, tetapi saya tidak bisa mendapatkan perl's Sys :: Syslog module untuk bekerja pada host, dan / usr / bin / logger yang diinstal pada host tidak mendukung logging ke server jauh (util-linux-ng- 2.17.2).
Jadi, hal pertama yang saya lakukan adalah mengunduh kode sumber untuk util-linux-2.20.1 yang mana program logger mendukung logging jarak jauh. Setelah pengujian, menjadi jelas ada batas yang dikenakan pada jumlah karakter yang diizinkan pada baris log. Menggali kode sumber saya menemukan batas 400-karakter kode keras. (Jika Anda tidak percaya, jalankan "strings / usr / bin / logger | grep 400" di sistem Linux apa pun).
Batas ini tidak dapat diterima untuk logging tipe apache (termasuk nodejs), jadi saya memodifikasi kodenya dan meningkatkan batasnya menjadi 4096. Ketika saya berada di sana, saya juga menambahkan opsi baris perintah baru yang memungkinkan seseorang untuk memasukkan opsi opsional string teks di awal setiap baris log. Saya melakukan ini karena log nodejs tidak menyertakan nama host seperti yang mungkin akan dilihat di apache.
Pada titik ini, saya dapat menjalankan skrip shell dengan "tail -F -n 0 [logfile] | ./modified_logger ...." dan berhasil. Tetapi saya memiliki beberapa kekhawatiran tentang menjalankan ini dari pengawasan (daemontools) atau bahkan di latar belakang, karena jika satu atau sisi lain dari pipa berakhir, maka ada risiko seluruh pipa akan berakhir. Saya juga memiliki kekhawatiran (meskipun belum diuji) tentang kinerja.
jadi saya memutuskan untuk menggabungkan fungsi ekor dengan fungsi logger menjadi biner tunggal yang dapat dieksekusi yang akan memotong kebutuhan untuk menggunakan pipa Unix atau program eksternal. Saya melakukan ini dengan meretas tail.c dari gnu coreutils dan memasukkan apa yang saya butuhkan ke dalam program logger yang dimodifikasi.
Hasilnya adalah biner baru (ukuran 117k) yang saya sebut "filelogger" dan yang terus-menerus memonitor satu atau lebih file dan mencatat setiap baris baru ke syslog lokal atau jauh, baik melalui UDP atau TCP. Itu bekerja seperti pesona. Saya dapat melakukan sedikit pembandingan dan mencatat sekitar 17.000 baris (1.8MB) dalam waktu sekitar 3 detik melintasi subnet dengan vlan dan beberapa saklar fisik di antara mereka, ke server jarak jauh yang menjalankan syslog-ng.
untuk menjalankan program Anda melakukan sesuatu seperti berikut (baik di latar depan, latar belakang, atau diawasi dengan daemontools):
./filelogger -t 'akses' -d -p local1.info -n [remote loghost] -u / tmp / diabaikan -a $ (nama host) / tmp / myfile1 / tmp / myfile2 ...
/ tmp / myfile1 dan / tmp / myfile2 adalah file yang dipantau.
"-A" adalah opsi baru yang saya tambahkan. Dalam hal ini saya memasukkan nama host lokal di awal setiap baris log.
Solusi ini persis jenis solusi yang saya cari ketika saya mengajukan pertanyaan dan, ternyata, tidak ada sampai saya membuatnya sendiri. :)