温馨提示×

Linux下如何高效管理JS日志

小樊
44
2025-12-29 00:00:18
栏目: 编程语言

Linux下高效管理JS日志

一 核心原则

  • 使用结构化日志(如JSON),便于检索、聚合与可视化;统一包含timestamp、level、message、service等关键字段。
  • 合理设置日志级别(DEBUG/INFO/WARN/ERROR/FATAL),生产环境避免过多DEBUG;必要时支持动态调整日志级别
  • 采用异步或批量写入,减少I/O阻塞;对高并发场景尤为重要。
  • 规范输出目标:区分errorcombined等多目标,便于故障定位与审计。
  • 从一开始就规划保留周期清理策略,避免磁盘被日志撑爆。

二 采集与落盘

  • 选择高性能日志库:
    • Pino:以高性能和低开销著称,适合高并发。
    • Winston:生态丰富、传输方式多,易于扩展。
    • Bunyan:结构化日志,便于后续处理。
  • 异步与多传输示例(Winston):
// npm i winston
const winston = require('winston');

const logger = winston.createLogger({
  level: process.env.NODE_ENV === 'production' ? 'info' : 'debug',
  format: winston.format.json(),
  transports: [
    new winston.transports.File({ filename: 'logs/error.log', level: 'error' }),
    new winston.transports.File({ filename: 'logs/combined.log' })
  ]
});

logger.info({ event: 'user.login', userId: '12345', ip: '192.168.1.1' });
  • 按时间轮转(winston-daily-rotate-file):
// npm i winston-daily-rotate-file
const DailyRotateFile = require('winston-daily-rotate-file');

logger.add(new DailyRotateFile({
  filename: 'logs/app-%DATE%.log',
  datePattern: 'YYYY-MM-DD',
  zippedArchive: true,
  maxSize: '20m',
  maxFiles: '14d'
}));
  • 若使用PM2运行Node.js,可结合其日志管理:pm2 logs 实时查看、按应用分流,并与后续集中式方案对接。

三 轮转与清理

  • 系统级轮转(logrotate,推荐用于文件句柄由Node写入的场景):
    新建配置**/etc/logrotate.d/myapp**:
/path/to/your/logs/*.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 640 root adm
}
  • 应用内轮转(如前述winston-daily-rotate-file),便于按天/大小自动归档与压缩。
  • 自动化清理:
    • 使用cron定期删除过期日志(示例保留7天):
#!/usr/bin/env bash
LOG_DIR="/path/to/your/logs"
find "$LOG_DIR" -type f -name "*.log*" -mtime +7 -delete
  • 也可在logrotate中通过rotate Ncompress控制保留与压缩。

四 集中化与可视化

  • 方案选型:
    • ELK Stack(Elasticsearch + Logstash + Kibana):大规模检索、分析与可视化。
    • Graylog:开箱即用的集中式日志平台。
    • Fluentd / Filebeat:轻量采集与转发,适配多源异构日志。
    • Grafana Loki:与Prometheus风格的一体化可观测性,成本友好。
  • 典型链路:Node.js(JSON)→ Filebeat/Fluentd → Logstash(可选解析/丰富)→ Elasticsearch → Kibana/Loki 展示与告警。
  • 错误追踪与APM:结合Sentry(错误跟踪、Source Map)与Datadog(全栈监控)实现日志与性能联动。

五 监控告警与安全合规

  • 文件与容量监控:
    • 使用Prometheus + Grafana监控日志目录/文件大小与增长速率,配置阈值告警。
    • 命令行快速排查:tail -f logs/combined.log | grep "ERROR",或配合awk/sed做字段提取与统计。
  • 安全与合规:
    • 避免记录密码、令牌、信用卡等敏感信息;必要时脱敏后再写入。
    • 限制日志文件权限(如640),仅授权必要人员访问;对归档/离线日志按需加密存储
  • 快速命令清单:
    • 实时查看错误:tail -f logs/combined.log | grep --line-buffered ERROR
    • 统计每分钟错误数:grep ERROR logs/combined.log | awk '{print $1":"$2}' | sort | uniq -c | sort -nr
    • 按条件筛选并导出:awk '$3 ~ /api\/v1/ {print $0}' logs/combined.log > api_errors.log

0