如何在Ubuntu监控Node.js日志
如何在Ubuntu上监控Node.js日志
在Ubuntu系统中,监控Node.js日志可通过命令行工具、进程管理器或集中式日志管理方案实现,以下是具体方法:
1. 基础命令行工具监控
1.1 使用tail
实时查看日志文件
若Node.js应用将日志输出到文件(如/var/log/myapp.log
),可通过tail -f
命令实时跟踪日志更新:
tail -f /var/log/myapp.log
该命令会持续显示日志文件的最后几行,新内容会实时追加显示。适用于快速查看实时日志的场景。
1.2 使用journalctl
查看系统日志
若Node.js应用以系统服务运行(如通过systemd
管理),可使用journalctl
查看其日志:
journalctl -u your-nodejs-service-name -f
其中your-nodejs-service-name
是服务的名称(启动时通过--name
指定或服务文件中的Name
字段)。-f
参数表示实时跟踪日志。适用于系统级日志管理。
2. 使用PM2进程管理器监控
PM2是Node.js常用的进程管理工具,内置日志管理和监控功能:
2.1 安装与启动
npm install pm2 -g # 全局安装PM2
pm2 start app.js --name my-app # 启动应用并命名为"my-app"
2.2 查看日志
pm2 logs my-app # 查看"my-app"的实时日志(合并stdout和stderr)
pm2 logs my-app --lines 50 # 查看最后50行日志
2.3 日志轮转
PM2默认自动轮转日志(保留7天,每文件最大10MB),也可手动配置:
pm2 set pm2-logrotate:max_size 10M # 单个日志文件最大10MB
pm2 set pm2-logrotate:retain 7 # 保留最近7天日志
PM2会将日志存储在~/.pm2/logs/
目录下(文件名为应用名-out.log
和应用名-err.log
)。适用于生产环境的进程管理和日志监控。
3. 配置日志轮转(避免日志膨胀)
当日志文件过大时,需通过logrotate
工具定期轮转、压缩和清理日志:
3.1 安装logrotate
sudo apt-get install logrotate
3.2 创建配置文件
在/etc/logrotate.d/
目录下创建my-app
配置文件:
sudo nano /etc/logrotate.d/my-app
添加以下内容(以/var/log/myapp.log
为例):
/var/log/myapp.log {
daily # 每天轮转
rotate 7 # 保留7天日志
compress # 压缩旧日志(如.gz格式)
missingok # 若日志不存在也不报错
notifempty # 若日志为空则不轮转
create 0640 root adm # 新日志文件权限和所有者
}
3.3 测试配置
sudo logrotate -f /etc/logrotate.d/my-app # 强制立即轮转
适用于需要自动化管理日志大小的场景。
4. 使用第三方日志管理工具(集中式监控)
对于分布式或大规模应用,建议使用ELK Stack(Elasticsearch+Logstash+Kibana)或Fluentd实现集中式日志收集、分析和可视化。
4.1 ELK Stack配置
- 安装ELK:
sudo apt-get install elasticsearch logstash kibana
- 配置Logstash:
创建/etc/logstash/conf.d/nodejs.conf
文件,内容如下:input { file { path => "/var/log/myapp.log" start_position => "beginning" } } output { elasticsearch { hosts => ["localhost:9200"] index => "nodejs-logs-%{ +YYYY.MM.dd} " } }
- 启动服务:
sudo systemctl start elasticsearch logstash kibana
- 访问Kibana:
浏览器打开http://服务器IP:5601
,配置索引模式(如nodejs-logs-*
)即可可视化日志。
4.2 Fluentd配置
- 安装Fluentd:
sudo apt-get install fluentd
- 配置Fluentd:
编辑/etc/td-agent/td-agent.conf
文件:source @type tail path /var/log/myapp.log pos_file /var/log/td-agent/nodejs.log.pos tag nodejs parse @type none
match nodejs @type elasticsearch host localhost port 9200 logstash_format true flush_interval 10s
- 启动Fluentd:
sudo systemctl start td-agent
适用于需要高吞吐量和灵活集成的场景。
5. 使用日志库增强日志功能
通过Winston或Bunyan等日志库,可实现日志分级(info/error/debug)、多输出目标(文件/控制台/远程服务器)和格式化(JSON/文本):
5.1 Winston示例
npm install 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' }
),
new winston.transports.Console()
]
}
);
logger.info('This is an info log');
logger.error('This is an error log');
5.2 Bunyan示例
npm install bunyan
const bunyan = require('bunyan');
const logger = bunyan.createLogger({
name: 'myapp',
streams: [
{
level: 'info', stream: process.stdout }
,
{
level: 'error', path: 'app-error.log' }
]
}
);
logger.info('This is an info log');
logger.error('This is an error log');
适用于需要结构化日志和高级功能的场景。
以上方法可根据需求选择:基础监控用tail
或journalctl
,生产环境用PM2,大规模应用用ELK/Fluentd,复杂日志需求用Winston/Bunyan。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在Ubuntu监控Node.js日志
本文地址: https://pptw.com/jishu/725330.html