Node.js 应用部署到 Ubuntu 后,日志如果只留在本机,排障和统一监控都会比较被动。要把日志实时送到远端,常见而且成熟的做法主要有两类:一类是直接走 Linux 原生的 Syslog 协议,另一类是接入 Fluentd 这类日志收集器。下面按“服务端怎么接收、Node.js 怎么发送、两种方案怎么选”三个问题展开,方便你根据现有环境、日志量和后续扩展需求做判断。
通过 Syslog 转发远程日志
如果你希望尽量少引入额外组件,Syslog 是最省事的一条路。它本身就是 Linux 系统通用的日志协议,在 Ubuntu 上通常配合 rsyslog 使用。对 Node.js 应用来说,只要通过 syslog 模块把日志发出去,再让接收端监听对应端口,就能完成基础的远程日志转发。

先在 Ubuntu 上配置 rsyslog 接收端
接收日志的机器需要先安装 rsyslog:
sudo apt-get update
sudo apt-get install rsyslog
安装完成后,编辑 /etc/rsyslog.conf。如果文件里已经有下面两行注释配置,需要取消注释,用来启用 UDP 接收能力:
#module(load="imudp")
#input(type="imudp" port="514")
然后在配置文件末尾追加以下内容:
$ModLoad imudp
$UDPServerRun 514
$InputUDPServerAddress 127.0.0.1
$InputUDPServerPort 514
$SystemLogFacility local0
$Local0.* @remote_ip_address:514
这里有两个点需要特别注意。第一,remote_ip_address 需要替换成 Node.js 应用所在机器的 IP 地址。第二,这组配置的核心目的,是让 rsyslog 通过 UDP 514 端口接收并处理指定设施号 local0 的日志,后续 Node.js 端也要保持同样的设施配置,才能顺利对应上。
保存后重启服务使配置生效:
sudo systemctl restart rsyslog
Node.js 端如何发送 Syslog 日志
应用侧安装 syslog 模块:
npm install syslog
然后在代码中创建一个带有应用名和设施号的 logger:
const syslog = require('syslog');
const log = syslog.createLogger({
app_name: 'my-nodejs-app',
facility: 'local0'
});
log.info('This is an info message');
这段代码里,app_name 用来标识日志来源,facility 设置为 local0,与前面 rsyslog 的接收规则保持一致。执行 log.info 后,日志会通过 UDP 514 端口发送到远程 rsyslog 服务器。
如果你的诉求只是把应用日志快速集中到另一台 Ubuntu 机器上,Syslog 方案已经足够直接。它的优点是组件少、部署快,缺点则是后续做复杂过滤、结构化加工或多目标分发时灵活度有限。
使用 Fluentd 做日志收集
当你不只是想“发出去”,而是还希望后续能做格式化、过滤、转发到多个目标,Fluentd 会更合适。它本质上是日志收集器,既能接收应用日志,也能根据配置把日志输出到不同系统,例如标准输出、对象存储或搜索平台。

先在 Ubuntu 上部署 Fluentd 接收端
先安装 Fluentd:
sudo apt-get update
sudo apt-get install fluentd
安装完成后,创建配置文件 /etc/fluent/fluent.conf,写入以下内容:
@type forward
port 24224
bind 0.0.0.0
@type stdout
这份配置表示 Fluentd 通过 forward 协议监听 24224 端口,并把收到的所有日志输出到标准输出。这个配置非常适合先验证链路是否打通,因为日志是否收到会比较直观。
如果后面要接入生产环境, 下的输出目标可以换成其他插件,例如 @type s3 或 @type elasticsearch。也就是说,Fluentd 的优势不在于“能收日志”本身,而在于收到之后还能继续路由和处理。
Node.js 端接入 fluent-logger
在 Node.js 应用中安装 fluent-logger:
npm install fluent-logger
然后使用下面的方式发送日志:
const Fluentd = require('fluent-logger').Fluentd;
const logger = new Fluentd('my-nodejs-app', {
host: 'remote_ip_address',
port: 24224
});
logger.post('info', 'This is an info message', function(err) {
if (err) {
console.error('Error posting log:', err);
}
});
这里的 remote_ip_address 要替换成 Fluentd 所在服务器的 IP 地址。代码里通过 logger.post 发送一条 info 类型日志;如果发送失败,回调中的 err 会给出错误信息,方便你在联调阶段确认网络、端口或服务状态是否正常。
相比 Syslog,这种方式的好处在于协议和处理链条更偏向日志采集场景,后续无论是按标签分类、转发到多个系统,还是对日志内容做进一步格式化,通常都更容易扩展。
怎么在 Syslog 和 Fluentd 之间做选择
如果你的目标很明确,就是把 Ubuntu 上 Node.js 应用的日志实时送到另一台机器,并且整体日志量不大、架构也尽量简单,那么 Syslog 更适合。它依赖少,配置路径也短,接收端和发送端都比较轻量。

如果你已经有集中式日志平台,或者后续准备把日志输出到多种目标,再加上你希望日志链路具备更强的过滤、格式化和扩展能力,那么 Fluentd 往往更合适。它多了一层收集器,但也换来了更强的可塑性。
从落地顺序看,也可以先用 Syslog 快速跑通远程监控,再在需要结构化处理和复杂路由时切到 Fluentd。两种方案都能满足 Node.js 日志远程监控这个核心目标,差别主要在于你是优先追求“尽快可用”,还是更看重“后续扩展”。







