温馨提示×

如何配置Linux JS日志监控

小樊
33
2025-12-15 06:54:42
栏目: 编程语言

Linux JS日志监控配置指南

一 场景与总体架构

  • 适用对象:运行在 Linux 上的 Node.js 或前端构建/运行时的 JavaScript 日志(如打包日志、浏览器控制台日志采集后落盘)。
  • 采集链路建议:应用日志 → 本地落盘或标准输出 → 采集器(如 Fluentd/Logstash)→ 存储与检索(如 Elasticsearch)→ 可视化告警(如 Kibana/Grafana)。
  • 快速落地路径:
    • 开发/单机:用 tail/grep 实时查看与过滤。
    • 生产 Node.js:用 PM2 托管与日志聚合,必要时接入 ELKGrafana Loki
    • 规范化:使用 Winston/Bunyan/Pino 输出结构化日志,便于检索与告警。

二 快速上手 命令行与系统工具

  • 实时查看日志尾部:
    • 命令:tail -f /path/to/app.log
  • 关键字高亮与过滤:
    • 命令:tail -f /path/to/app.log | grep --color=auto 'error\|warn'
  • 分页实时查看:
    • 命令:tail -f /path/to/app.log | less -S
  • 定时统计关键字出现次数:
    • 命令:watch -n 1 "grep -c 'ERROR' /path/to/app.log"
  • 若应用由 systemd 托管,可直接查看服务日志:
    • 命令:journalctl -u your-node-service.service -f
  • 以上命令适合临时排查与验证日志输出是否正常。

三 Node.js 应用的标准化与进程管理

  • 使用 Winston 输出结构化日志(示例):
    • 安装:npm install winston
    • 配置与输出:
      • 代码示例:
        const winston = require('winston');
        const logger = winston.createLogger({
          level: 'info',
          format: winston.format.json(),
          transports: [
            new winston.transports.Console(),
            new winston.transports.File({ filename: 'error.log', level: 'error' }),
            new winston.transports.File({ filename: 'combined.log' })
          ]
        });
        logger.info('服务启动', { port: 3000 });
        logger.error('数据库连接失败', { retry: true });
        
  • 使用 PM2 托管与集中查看日志:
    • 启动应用:pm2 start app.js --name myapi
    • 实时查看:pm2 logs myapi
    • 按时间查看:pm2 logs myapi --lines 200
  • 建议:统一日志目录(如 /var/log/myapp/),并设置 logrotate 做按日切分与保留。

四 集中化与可视化监控

  • 自建开源方案:
    • ELK Stack(Elasticsearch + Logstash + Kibana):Logstash/Fluentd 采集与解析,Elasticsearch 存储检索,Kibana 构建仪表盘与告警。
    • Grafana Loki + Promtail:轻量日志聚合,与 Grafana 深度集成,适合云原生与成本敏感场景。
    • Graylog:集中式日志管理,支持丰富查询与告警能力。
  • 云托管方案:
    • LogDNAAmazon CloudWatch Logs 等,减少自建运维成本,适合快速上线与跨区域集中。
  • 接入要点:
    • 统一字段:如 timestamp、level、service、msg、trace_id
    • 结构化输出:优先 JSON,便于分析与聚合。
    • 采样与脱敏:避免记录敏感信息(如密码、密钥)。

五 告警与自动化响应

  • 日志关键字触发告警(示例思路):
    • 命令:tail -F /var/log/myapp/combined.log | awk '/ERROR/ { system("curl -X POST -H 'Content-Type: application/json' -d '{\"text\":\"ERROR 发现于 $(date)\"}' https://hooks.example.com/alert") }'
    • 说明:-F 更健壮地处理日志轮转;生产环境建议使用 Fluentd/Logstash 的告警插件或对接 Alertmanager/Prometheus
  • 可视化告警:在 KibanaGrafana 配置阈值与通知渠道(如 Webhook/企业微信/钉钉/Slack)。
  • 建议:为不同级别(如 error、warn)设置不同策略;结合 trace_id 实现链路追踪与快速定位。

0