Linux服务器上JS如何进行日志管理
导读:Linux服务器上JS日志管理实操指南 一 核心原则与日志规范 使用明确的日志级别:在生产环境优先使用 info / warn / error,开发或排障时临时开启 debug / trace,避免过量输出影响性能与成本。 统一日志格式:...
Linux服务器上JS日志管理实操指南
一 核心原则与日志规范
- 使用明确的日志级别:在生产环境优先使用 info / warn / error,开发或排障时临时开启 debug / trace,避免过量输出影响性能与成本。
- 统一日志格式:推荐结构化日志(如 JSON),包含 timestamp、level、service/module、message、trace_id 等字段,便于检索与分析。
- 输出策略:容器与系统服务优先输出到 stdout/stderr,由运行时或编排系统采集;传统进程可同时落盘以便本地排查。
- 隐私与合规:严禁记录 密码、密钥、令牌、身份证号 等敏感信息,必要时进行脱敏或哈希处理。
- 性能与可靠性:在高并发场景优先选择高性能库(如 Pino),并尽量采用异步写入与批量刷新策略。
二 采集与落盘方案
- 原生 Node.js 应用
- 使用 Winston / Pino / Bunyan / Log4js 等成熟库,配置多传输(控制台、文件、HTTP 等)、级别与格式;高吞吐场景优先考虑 Pino。
- 示例(Winston + 按天滚动):
const { createLogger, format, transports } = require('winston'); const DailyRotateFile = require('winston-daily-rotate-file'); const logger = createLogger({ level: process.env.NODE_ENV === 'production' ? 'info' : 'debug', format: format.combine( format.timestamp(), format.json() ), transports: [ new DailyRotateFile({ filename: 'logs/app-%DATE%.log', datePattern: 'YYYY-MM-DD', zippedArchive: true, maxSize: '20m', maxFiles: '14d' } ), new transports.Console({ format: format.simple() } ) ] } );
- PM2 托管进程
- 使用 PM2 启动应用,自动生成并轮转 out.log / err.log,便于统一采集与归档:
sudo npm i -g pm2 pm2 start app.js -n myapp pm2 install pm2-logrotate # 启用日志轮转插件
- 使用 PM2 启动应用,自动生成并轮转 out.log / err.log,便于统一采集与归档:
- 系统级采集
- 将应用日志写入 journald(如通过 systemd 服务),使用 journalctl 统一查询与过滤:
journalctl -u myapp.service -f
- 将应用日志写入 journald(如通过 systemd 服务),使用 journalctl 统一查询与过滤:
三 轮转与保留策略
- 应用内轮转(代码控制)
- 使用 winston-daily-rotate-file 或 pino-rotate 按时间/大小切分,并配置压缩与保留天数,避免单文件过大与磁盘被占满。
- 系统级轮转(推荐与应用内二选一或叠加)
- 使用 logrotate 管理日志生命周期(按日轮转、压缩、保留份数、缺失不报错等):
# /etc/logrotate.d/myapp /var/log/myapp/*.log { daily rotate 7 compress delaycompress missingok notifempty create 640 node node copytruncate } - 说明:生产上常见做法是“应用内按天/大小切分 + 系统级压缩与清理”,既减少句柄占用,又便于统一运维。
- 使用 logrotate 管理日志生命周期(按日轮转、压缩、保留份数、缺失不报错等):
四 集中化与可视化
- 自建或托管平台
- ELK Stack(Elasticsearch + Logstash/Kafka + Kibana):强大的检索、分析与可视化能力,适合复杂查询与仪表盘。
- Graylog:集中式日志管理,易部署、告警灵活。
- Fluentd / Fluent Bit:轻量采集器,适合容器与多源汇聚。
- Grafana Loki:与 Prometheus 生态契合,低成本、易扩展。
- 接入方式
- 在日志库中直接添加对应传输(如 winston-elasticsearch),或将文件/标准输出交由 Logstash/Fluentd 采集并转发至后端。
- 监控与告警
- 结合 Prometheus + Grafana 对日志指标(如错误率、延迟)做可视化与阈值告警,快速定位异常。
五 日常运维与排障命令
- 实时查看:
tail -f /var/log/myapp/app-2025-09-01.log - 关键字检索与高亮:
grep --color=auto -i 'error\|timeout' /var/log/myapp/*.log - 正则与统计:
grep -Eo 'req_id=[a-z0-9]+' app.log | sort | uniq -c | sort -nr - 按时间窗口查看(配合 journalctl):
journalctl -u myapp.service --since "2025-09-01 10:00:00" --until "2025-09-01 12:00:00" - 定期清理与归档(示例):
# 归档30天前日志 find /var/log/myapp -name "*.gz" -mtime +30 -delete rsync -avz /var/log/myapp/ backup:/logs/myapp/
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux服务器上JS如何进行日志管理
本文地址: https://pptw.com/jishu/786904.html
