温馨提示×

linux下nodejs日志咋采集

小樊
37
2026-10-14 09:37:08
栏目: 编程语言

在 Linux 下采集 Node.js 日志,常见做法可以分成 应用内日志规范 + 系统级采集 + 集中式收集 三块。下面按“从简单到生产级”给你一个清晰方案。


一、Node.js 自身日志怎么打(基础)

1. 不要用 console.log 直接乱打

推荐用日志库:

  • winston(最常用)
  • pino(性能最好,适合高并发)
  • bunyan

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' })
  ]
});

logger.info('server started');

✅ 好处:

  • 自动带时间、级别
  • 方便后面采集

二、Linux 下日志文件采集(最常用)

方案 1:直接读日志文件(简单)

Node.js 写文件:

/var/log/myapp/combined.log

用 Linux 工具看:

tail -f /var/log/myapp/combined.log

适合:

  • 单机
  • 排查问题

方案 2:systemd + journald(推荐)

如果你用 systemd 启 Node.js:

service 文件

[Unit]
Description=Node App

[Service]
ExecStart=/usr/bin/node /opt/myapp/app.js
WorkingDirectory=/opt/myapp
Restart=always
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

查看日志:

journalctl -u myapp -f

✅ 优点:

  • 不用自己管日志文件
  • 自动轮转
  • 时间戳标准

三、日志集中采集(生产环境)

方案 3:Filebeat + ELK(最主流)

架构

Node.js → 日志文件 → Filebeat → Kafka/Logstash → Elasticsearch → Kibana

Filebeat 配置示例

filebeat.inputs:
- type: log
  paths:
    - /var/log/myapp/*.log

output.elasticsearch:
  hosts: ["http://localhost:9200"]

✅ 适合:

  • 多台服务器
  • 需要搜索、告警

方案 4:Fluent Bit / Promtail(云原生)

Promtail + Loki(轻量)

scrape_configs:
  - job_name: nodejs
    static_configs:
      - targets: [localhost]
        labels:
          job: nodejs
          __path__: /var/log/myapp/*.log

配合 Grafana 看日志,很香。


四、容器环境(Docker / K8s)

Docker

docker logs -f container_id

K8s

kubectl logs -f pod-name

日志统一走 stdout,由采集组件处理。


五、最佳实践建议

✅ 生产环境:

  • 日志输出 JSON
  • 带 traceId
  • 错误日志单独文件
  • 日志级别可动态切换

✅ 不推荐:

  • 自己写日志轮转
  • 把日志写数据库

六、我可以继续帮你

你可以告诉我:

  1. 单机还是集群?
  2. 是否用 Docker / K8s?
  3. 想要“看日志”还是“做监控告警”?

我可以直接给你 完整配置模板。

0 踩