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

您的位置:首页 >CentOS上Node.js日志如何查看与分析

CentOS上Node.js日志如何查看与分析

  发布于2026-05-02 阅读(0)

扫一扫,手机访问

CentOS上Node.js日志查看与分析

排查问题、监控应用状态,日志是关键。在CentOS服务器上管理Node.js应用,掌握日志的定位、查看和分析方法,是每一位开发者和运维人员的必修课。下面,我们就来系统地梳理一下。

一 定位日志位置

首先,得知道日志在哪。Node.js应用的日志输出方式多样,常见的位置和查找方式有:

  • 常见位置与方式:
    • 应用内日志文件: 最简单直接的方式。日志通常位于项目目录下的 logs/ 文件夹,或者开发者自定义的路径中,比如 app.logerror.logcombined.log
    • 标准输出重定向: 如果启动命令类似 node app.js > logs/app.log 2>&1 &,那么标准输出和错误输出都会被重定向到指定的文件。
    • systemd 服务日志: 对于通过systemd托管的服务,使用 journalctl -u your-nodejs-service-name 命令查看其所有输出。
    • 系统日志目录: 部分应用会遵循约定,将日志写入 /var/log/ 目录下的自定义子目录。
    • 快速定位进程打开的日志文件: 如果以上都不确定,可以先通过 ps -ef | grep node 找到应用的进程ID(PID),再用 lsof -p 命令查看该进程打开了哪些文件,从中找出日志文件路径。

二 快速查看与常用命令

找到日志后,如何高效地查看和检索信息?这些命令能帮上大忙。

  • 实时查看:
    • 文件: tail -f /var/log/nodejs/app.log,实时追踪日志尾部的新内容。
    • systemd 服务: journalctl -u nodejs.service -f,实时查看服务的日志流。
    • PM2 应用: pm2 logs my-app,直接查看由PM2管理的应用日志。
  • 检索与统计:
    • 关键字过滤: grep ‘error’ /var/log/nodejs/app.log,快速筛选出所有错误行。
    • 错误数量: grep ‘error’ /var/log/nodejs/app.log | wc -l,统计错误出现的次数。
    • 分页浏览: less /var/log/nodejs/app.log,方便上下翻页查看大文件。
  • 按时间窗口查看(systemd):
    • 最近 10 分钟: journalctl -u nodejs.service --since “10 minutes ago”
    • 指定日期: journalctl -u nodejs.service -S “2025-10-30” -U “2025-10-30 23:59:59”

三 结构化日志与运行方式

原始的文本日志不利于机器解析。采用结构化日志,能让后续的分析事半功倍。

  • 使用结构化日志库: 推荐使用 Winston、Pino、Bunyan、Log4js 等库。它们能统一日志字段,如 timestamp(时间戳)、level(级别)、msg(消息)、trace_id/requestId(请求ID)、pid(进程ID),极大方便了检索与聚合。
  • 示例(Winston,按级别分文件并输出到控制台):
    • 安装: npm i winston
    • 配置:
      • const winston = require(‘winston’);
      • const logger = winston.createLogger({level: ‘info’,format: winston.format.json(),transports: [new winston.transports.File({ filename: ‘logs/error.log’, level: ‘error’ }),new winston.transports.File({ filename: ‘logs/combined.log’ }),new winston.transports.Console()]});
  • 运行与采集:
    • 直接运行并重定向: node app.js > logs/app.log 2>&1
    • PM2: pm2 start app.js --name my-app,查看日志:pm2 logs my-app
    • systemd: 在服务单元文件中配置 StandardOutput/StandardError,将其指向文件或 journald。

四 日志轮转与保留策略

日志文件会不断增长,必须有一套轮转和清理机制,以防磁盘被撑满。

  • 应用内轮转(与系统配合更灵活): 例如使用 winston-daily-rotate-file 插件,可以实现按天切分、自动压缩、保留指定天数。
    • 示例:
      • const DailyRotateFile = require(‘winston-daily-rotate-file’);
      • const transport = new DailyRotateFile({filename: ‘logs/myapp-%DATE%.log’,datePattern: ‘YYYY-MM-DD’,zippedArchive: true,maxFiles: ‘14’});
  • 系统级轮转(通用、与运行方式无关): 配置系统的 logrotate 工具,编辑 /etc/logrotate.d/nodejs_app 文件。
    • 示例:
      • /path/to/your/nodejs/app/logs/*.log {dailyrotate 7compressmissingoknotifemptycreate 0640 root root}
    • 验证: sudo logrotate -f /etc/logrotate.d/nodejs_app
  • PM2 内置轮转(插件):
    • 安装: pm2 install pm2-logrotate
    • 配置示例: pm2 set pm2-logrotate:max_size 10Mpm2 set pm2-logrotate:retain 7pm2 set pm2-logrotate:compress truepm2 set pm2-logrotate:rotateInterval “0 0 * * *”

五 集中式日志与可视化分析

服务器和应用数量增多时,分散的日志难以管理。集中式日志系统是必然选择。

  • 方案选型: 经典的 ELK(Elasticsearch + Logstash + Kibana)栈,或其变体 EFK(将 Logstash 替换为 Fluentd),以及 Graylog 都是成熟的选择。
  • 轻量采集: 使用 Filebeat 轻量级采集器读取应用日志,并发送到 Logstash 或直接到 Elasticsearch。
    • Filebeat 示例(/etc/filebeat/filebeat.yml):
      • filebeat.inputs:
        • type: logenabled: truepaths:
          • /var/log/nodejs/app.log
      • output.logstash:
        • hosts: [“localhost:5044”]
  • Logstash 简单解析(按 JSON 或 Grok):
    • input { file { path => “/var/log/nodejs/app.log” start_position => “beginning” } }
    • filter {json { source => “message” }date { match => [“timestamp”, “ISO8601”] }}
    • output { elasticsearch { hosts => [“localhost:9200”] index => “nodejs-logs-%{+YYYY.MM.dd}” } }
  • Kibana: 访问 http://:5601,创建索引模式 nodejs-logs-*,之后便可以在 Discover 页面中按 level: error 等条件进行检索,在 Visualize/Dashboard 模块构建错误趋势、响应时间等可视化图表。
本文转载于:https://www.yisu.com/ask/88451157.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注