商城首页欢迎来到中国正版软件门户

您的位置:首页 >Ubuntu Node.js日志如何实现自动化处理

Ubuntu Node.js日志如何实现自动化处理

  发布于2026-08-06 阅读(0)

扫一扫,手机访问

在Ubuntu环境下,Node.js日志的自动化处理有几种成熟的方案,这里逐一说明。核心思路无非是轮转、压缩、清理,以及集中管理,但具体怎么落地,还得看应用场景和部署方式。

Ubuntu Node.js日志如何实现自动化处理

1. 使用logrotate工具(系统原生推荐)

logrotate是Ubuntu系统自带的日志管理工具,能自动完成日志轮转、压缩、清理等操作,算是Node.js日志处理的基础方案。安装很简单,如果没装,运行sudo apt-get install logrotate就行,不过Ubuntu通常默认已经预装了。

接下来,在/etc/logrotate.d/目录下新建一个nodejs文件,比如sudo nano /etc/logrotate.d/nodejs,然后添加配置,注意根据实际路径调整。配置内容如下:

/path/to/your/nodejs/logs/*.log {
    daily                   # 每天轮转一次(可选:weekly/monthly)
    rotate 7                # 保留最近7个轮转日志(避免无限堆积)
    compress                # 使用gzip压缩旧日志(节省空间)
    delaycompress           # 延迟压缩(如第8个日志才压缩第1个,减少IO压力)
    missingok               # 若日志文件不存在,不报错继续执行
    notifempty              # 若日志为空,不进行轮转
    create 0640 root adm    # 轮转后创建新日志文件,权限0640,属主root、属组adm
}

配置完成后,可以用sudo logrotate -f /etc/logrotate.d/nodejs手动触发轮转,测试配置是否正确。logrotate默认通过/etc/cron.daily/logrotate每日自动执行,所以一般不需要额外配置。

2. 利用pm2的内置日志管理(适合pm2部署的应用)

如果使用pm2管理Node.js进程,它的内置日志模块可以直接实现日志轮转,省去额外工具。安装pm2:sudo npm install pm2 -g,启动应用时指定日志路径:

pm2 start app.js --name "my-app" \
    --out-file /var/log/nodejs/my-app-out.log   # 标准输出日志路径
    --error-file /var/log/nodejs/my-app-err.log # 错误输出日志路径

配置轮转参数,可以通过pm2 set pm2:logrotate命令,或者创建ecosystem.config.js文件。例如,在ecosystem.config.js中添加:

module.exports = {
  apps: [{
    name: 'my-app',
    script: 'app.js',
    out_file: '/var/log/nodejs/my-app-out.log',
    error_file: '/var/log/nodejs/my-app-err.log',
    log_date_format: 'YYYY-MM-DD HH:mm Z',  // 日志时间格式
    time: true,              // 在日志中添加时间戳
    merge_logs: true,        // 合并stdout/stderr
    max_size: '10M',         // 单个日志文件最大10MB
    max_files: 7             // 保留7个历史日志文件
  }]
};

启动应用时加载配置:pm2 start ecosystem.config.js

3. 结合rsyslog/syslog-ng集中收集(分布式场景)

对于多服务器部署的Node.js应用,可以通过rsyslog/syslog-ng将日志集中收集到一台服务器,便于统一管理。安装rsyslog:sudo apt-get install rsyslog(Ubuntu默认已安装)。

配置rsyslog收集Node.js日志:编辑/etc/rsyslog.d/50-nodejs.conf(新建文件),添加以下内容,将Node.js日志转发到指定文件:

if $programname == 'node' then /var/log/nodejs/nodejs.log
& stop  # 停止后续规则处理,避免重复记录

重启rsyslog服务:sudo systemctl restart rsyslog,使配置生效。此时Node.js的标准输出/错误日志会被rsyslog捕获到/var/log/nodejs/nodejs.log,再结合logrotate对该文件进行轮转即可。

4. 第三方日志管理工具(高级分析与可视化)

对于需要深度分析、可视化或长期存储的场景,可以使用ELK Stack(Elasticsearch+Logstash+Kibana)或Graylog等工具。这里以ELK Stack为例。

安装组件:sudo apt-get install elasticsearch logstash kibana(需调整Ja va版本以满足要求)。配置Logstash收集Node.js日志:创建/etc/logstash/conf.d/nodejs.conf,内容如下:

input {
  file {
    path => "/var/log/nodejs/*.log"  # 日志文件路径
    start_position => "beginning"    # 从文件开头读取(首次配置时需开启)
    sincedb_path => "/dev/null"      # 忽略sincedb文件(测试用)
  }
}

filter {
  # 可选:添加过滤器解析日志(如grok解析JSON格式)
  grok {
    match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:loglevel} %{GREEDYDATA:logmessage}" }
  }
  date {
    match => [ "timestamp", "ISO8601" ]
  }  # 转换时间格式
}

output {
  elasticsearch { hosts => ["localhost:9200"] }  # 发送到Elasticsearch
  stdout { codec => rubydebug }  # 控制台输出(测试用)
}

启动服务:sudo systemctl start elasticsearch logstash kibana,通过http://localhost:5601访问Kibana,创建索引模式(如nodejs-*)即可可视化日志。

5. 自动化清理旧日志(补充方案)

除了logrotate的rotate参数,还可以通过cron定时任务或Node.js脚本定期清理过期日志(比如超过30天的日志)。

cron定时任务:编辑当前用户的crontab(crontab -e),添加以下内容,每天凌晨1点删除7天前的.log文件:

0 1 * * * find /path/to/your/nodejs/logs -type f -name "*.log" -mtime +7 -exec rm -f {} \;

Node.js脚本清理:创建clean_logs.js,内容如下:

const fs = require('fs');
const path = require('path');

const logDir = '/path/to/your/nodejs/logs';
const maxAge = 7 * 24 * 60 * 60 * 1000; // 7天的毫秒数

fs.readdir(logDir, (err, files) => {
  if (err) throw err;
  files.forEach(file => {
    const filePath = path.join(logDir, file);
    fs.stat(filePath, (err, stats) => {
      if (err) throw err;
      if (stats.isFile() && Date.now() - stats.mtime > maxAge) {
        fs.unlink(filePath, err => {
          if (err) throw err;
          console.log(`Deleted: ${filePath}`);
        });
      }
    });
  });
});

通过cron执行该脚本:0 2 * * * /usr/bin/node /path/to/clean_logs.js

本文转载于:https://www.yisu.com/ask/87613326.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注