发布于2026-05-21 阅读(0)
扫一扫,手机访问
在分布式架构和微服务盛行的今天,将运行在Ubuntu服务器上的Node.js应用日志集中到一处进行查看和分析,已经成为运维和开发的常规需求。这不仅能方便故障排查,也为后续的监控和审计打下了基础。下面,我们就来梳理一下实现这个目标的具体路径。

一切的基础,是确保你的Node.js应用本身能产生结构清晰、内容完整的日志。在Node.js生态中,winston和morgan是使用最广泛的两个日志库。这里以功能更强大的winston为例,展示一个兼顾生产环境和开发调试的配置方案:
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' })
]
});
if (process.env.NODE_ENV !== 'production') {
logger.add(new winston.transports.Console({
format: winston.format.simple()
}));
}
这个配置做了几件事:将错误级别(error)及以上的日志单独写入error.log;将所有级别(info及以上)的日志写入combined.log;在非生产环境时,额外在控制台输出简化格式的日志,方便开发调试。日志格式选用JSON,为后续的解析和传输提供了便利。
应用日志生成后,下一步就是将它们“运送”出去。在Linux世界,rsyslog是完成这项任务的老牌且可靠的工具。它不仅能处理系统日志,也能作为客户端转发自定义的应用日志。
在Ubuntu上,安装rsyslog非常简单:
sudo apt-get update
sudo apt-get install rsyslog
安装完成后,需要修改其配置来指定转发规则。你可以编辑主配置文件/etc/rsyslog.conf,更推荐的做法是在/etc/rsyslog.d/目录下创建一个新的配置文件,例如50-nodejs-forward.conf,这样更清晰且易于管理。
在配置文件中,我们需要加载网络模块并设置转发目标:
# 加载UDP模块以通过UDP接收日志
module(load="imudp")
input(type="imudp" port="514")
# 加载TCP模块以通过TCP接收日志(更可靠)
module(load="imtcp")
input(type="imtcp" port="514")
# 将所有日志转发到远程syslog服务器
*.* @remote_server_ip:514
注意,最后一行中的remote_server_ip需要替换为你实际的远程日志服务器的IP地址。@符号表示使用UDP协议,如果想用更可靠的TCP协议,可以改用@@。
配置完成后,别忘了重启服务让改动生效:
sudo systemctl restart rsyslog
日志发出来了,还得有地方接收。在作为日志中心的远程服务器上,同样需要配置rsyslog来监听、接收并存储这些日志。
同样地,在远程服务器的/etc/rsyslog.d/目录下(例如创建60-receive-logs.conf),添加如下配置:
# 启用UDP和TCP监听
module(load="imudp")
input(type="imudp" port="514")
module(load="imtcp")
input(type="imtcp" port="514")
# 定义一个日志存储模板,按日期分割文件
$template RemoteLogs,"/var/log/remote/%$YEAR%-%$MONTH%-%$DAY%.log"
# 应用规则:如果日志来源IP是本地服务器,则按模板存储
if $fromhost-ip == 'your_local_server_ip' then ?RemoteLogs
& stop
这里有两个关键点:一是$template定义了日志文件的存储路径和命名格式,示例中会按“年-月-日.log”的格式每天生成一个新文件,存放在/var/log/remote/目录下。二是if语句根据来源IP(your_local_server_ip需替换为你的Node.js服务器IP)进行过滤,确保只处理特定服务器的日志,避免混乱。
配置完成后,同样重启远程服务器上的rsyslog服务:
sudo systemctl restart rsyslog
理论配置完毕,实践检验一下。验证过程非常直观。
首先,在部署了Node.js应用的本地服务器上,我们可以使用系统命令logger模拟生成一条日志消息:
logger "This is a test log message from Node.js server"
然后,切换到远程日志服务器上,实时查看我们为远程日志定义的目录:
tail -f /var/log/remote/*.log
如果一切配置正确,几秒钟内你就应该能在远程服务器上看到这条测试日志。看到它,就意味着从日志生成、本地采集、网络传输到远程存储的整个管道已经成功打通。
至此,一个基于rsyslog的Node.js日志远程访问方案就搭建完成了。这套方案经典而稳定,是构建更复杂日志系统(如接入ELK Stack或Graylog)的良好起点。接下来,你就可以在此基础上,进一步考虑日志的解析、索引和可视化展示了。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8