Tôi đang trả lời câu hỏi của riêng tôi.
swatch có thể đã hoạt động, nhưng tôi không thể để mô-đun Sys :: Syslog của perl hoạt động trên máy chủ và / usr / bin / logger được cài đặt trên máy chủ không hỗ trợ đăng nhập vào máy chủ từ xa (produc-linux-ng- 2.17.2).
Vì vậy, điều đầu tiên tôi làm là tải xuống mã nguồn cho produc-linux-2.20.1 mà chương trình logger không hỗ trợ ghi nhật ký từ xa. Khi thử nghiệm, rõ ràng có giới hạn về số lượng ký tự được phép trên dòng nhật ký. Đi sâu vào mã nguồn tôi thấy giới hạn 400 ký tự được mã hóa cứng. (Nếu bạn không tin tôi, hãy chạy "chuỗi / usr / bin / logger | grep 400" trên bất kỳ hệ thống Linux nào).
Giới hạn này không được chấp nhận đối với loại ghi nhật ký apache (bao gồm cả nodejs), vì vậy tôi đã sửa đổi mã và tăng giới hạn lên 4096. Trong khi tôi ở đó, tôi cũng đã thêm một tùy chọn dòng lệnh mới cho phép người ta chèn tùy chọn dòng lệnh chuỗi văn bản ở đầu mỗi dòng nhật ký. Tôi đã làm điều này bởi vì các bản ghi của nodejs không bao gồm tên máy chủ như người ta có thể thấy trong apache.
Tại thời điểm này, tôi có thể chạy tập lệnh shell với "tail -F -n 0 [logfile] | ./modified_logger ...." và nó đã hoạt động. Nhưng tôi có một số lo ngại về việc chạy nó từ giám sát (daemontools) hoặc thậm chí ở chế độ nền, bởi vì nếu một hoặc các mặt khác của đường ống chấm dứt, thì có nguy cơ toàn bộ đường ống sẽ chấm dứt. Tôi cũng có những lo ngại (mặc dù chưa được kiểm tra) về hiệu suất.
Vì vậy, tôi quyết định kết hợp chức năng đuôi với chức năng logger thành một nhị phân thực thi duy nhất có thể bỏ qua nhu cầu sử dụng các ống Unix hoặc các chương trình bên ngoài. Tôi đã làm điều này bằng cách hack tail.c từ gnu coreutils và kết hợp những gì tôi cần vào chương trình logger đã sửa đổi.
Kết quả là một nhị phân mới (kích thước 117k) mà tôi đang gọi là "filelogger" và liên tục theo dõi một hoặc nhiều tệp và ghi nhật ký từng dòng mới vào một syslog cục bộ hoặc từ xa, thông qua UDP hoặc TCP. Nó hoạt động như một say mê. Tôi đã có thể thực hiện một số điểm chuẩn nhỏ và nó ghi lại khoảng 17.000 dòng (1,8 MB) trong khoảng 3 giây trên các mạng con với một vlan và một vài chuyển đổi vật lý giữa chúng, đến một máy chủ từ xa chạy syslog-ng.
để chạy chương trình, bạn làm một cái gì đó như sau (ở nền trước, nền hoặc được giám sát với daemontools):
./filelogger -t 'access' -d -p local1.info -n [loghost từ xa] -u / tmp / bị bỏ qua -a $ (tên máy chủ) / tmp / myfile1 / tmp / myfile2 ...
/ tmp / myfile1 và / tmp / myfile2 là các tệp đang được theo dõi.
"-A" là tùy chọn mới mà tôi đã thêm. Trong trường hợp này, tôi chèn tên máy chủ cục bộ ở đầu mỗi dòng nhật ký.
Giải pháp này chính xác là loại giải pháp tôi đang tìm kiếm khi tôi đặt câu hỏi và, hóa ra, nó không tồn tại cho đến khi tôi tự thực hiện. :)