位置:首页 > JavaScript > Node.js 日志在 Ubuntu 上如何实现远程监控

Node.js 日志在 Ubuntu 上如何实现远程监控

时间:2026-08-24  |  作者:穿越地图的猫  |  阅读:0

目录

  1. 通过 Syslog 转发远程日志
  2. 使用 Fluentd 做日志收集
  3. 怎么在 Syslog 和 Fluentd 之间做选择

前言

Node.js 应用部署到 Ubuntu 后,如果日志只停留在本机,定位故障和统一监控都会变得低效。要把日志实时送到远端,常见做法主要是 Syslog 转发和 Fluentd 收集,前者更轻量,后者更适合扩展。下面按接收端配置、Node.js 发送方式和选型判断三部分拆开说明。

Node.js 应用部署到 Ubuntu 后,日志如果只留在本机,排障和统一监控都会比较被动。要把日志实时送到远端,常见而且成熟的做法主要有两类:一类是直接走 Linux 原生的 Syslog 协议,另一类是接入 Fluentd 这类日志收集器。下面按“服务端怎么接收、Node.js 怎么发送、两种方案怎么选”三个问题展开,方便你根据现有环境、日志量和后续扩展需求做判断。

通过 Syslog 转发远程日志

如果你希望尽量少引入额外组件,Syslog 是最省事的一条路。它本身就是 Linux 系统通用的日志协议,在 Ubuntu 上通常配合 rsyslog 使用。对 Node.js 应用来说,只要通过 syslog 模块把日志发出去,再让接收端监听对应端口,就能完成基础的远程日志转发。

Syslog 方案中 rsyslog 接收端与 Node.js 发送端的配置关系图
Syslog 远程转发链路用结构图梳理 Syslog 方案里的接收端配置、设施号对应关系和 UDP 514 发送路径。

先在 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 会更合适。它本质上是日志收集器,既能接收应用日志,也能根据配置把日志输出到不同系统,例如标准输出、对象存储或搜索平台。

Fluentd 接收与输出路径示意图,展示 Node.js 日志进入 24224 端口后输出到 stdout 或其他插件
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 更适合。它依赖少,配置路径也短,接收端和发送端都比较轻量。

Syslog 与 Fluentd 的适用场景对比卡片图,概括依赖复杂度、扩展能力和推荐使用场景
Syslog 与 Fluentd 选型对比把两种方案的判断维度压缩成对比卡片,适合放在选型结尾,帮助读者快速做决策。

如果你已经有集中式日志平台,或者后续准备把日志输出到多种目标,再加上你希望日志链路具备更强的过滤、格式化和扩展能力,那么 Fluentd 往往更合适。它多了一层收集器,但也换来了更强的可塑性。

从落地顺序看,也可以先用 Syslog 快速跑通远程监控,再在需要结构化处理和复杂路由时切到 Fluentd。两种方案都能满足 Node.js 日志远程监控这个核心目标,差别主要在于你是优先追求“尽快可用”,还是更看重“后续扩展”。

免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

相关文章

更多

精选合集

更多

大家都在玩

热门话题

大家都在看

更多