如何设置Debian JS日志监控

Debian JS日志监控实操指南一 架构与方案选型应用侧:使用 Node.js 的日志库(如 winston、pino、morgan)输出结构化日志,便于检索与聚合。运行侧:用 systemd 托管进程,统一标准输出/错误到 journald,便于集中查看与转发。存储与可视化:小规模用 journald + rsyslog/filebeat 聚合到 ELK(Elasticsearch、Lo

Debian JS日志监控实操指南

一 架构与方案选型

  • 应用侧:使用 Node.js 的日志库(如 winston、pino、morgan)输出结构化日志,便于检索与聚合。
  • 运行侧:用 systemd 托管进程,统一标准输出/错误到 journald,便于集中查看与转发。
  • 存储与可视化:小规模用 journald + rsyslog/filebeat 聚合到 ELK(Elasticsearch、Logstash、Kibana)Graylog;中大规模建议直接走 filebeat → Logstash/Elasticsearch
  • 告警:在 Kibana 建立可视化与阈值告警,或在 Graylog 配置规则告警。

二 快速落地步骤

  • 应用侧日志标准化
    • 安装日志库(示例为 winston):npm i winston;如需按日轮转:npm i winston-daily-rotate-file
    • 配置示例(写入文件 + 控制台,生产建议 JSON 格式):
      • const winston = require(‘winston’);
        const { createLogger, format, transports } = winston;
        const DailyRotateFile = require(‘winston-daily-rotate-file’);
        const logger = createLogger({
        level: process.env.LOG_LEVEL || ‘info’,
        format: format.combine(format.timestamp({ format: ‘YYYY-MM-DD HH:mm:ss’ }), format.json()),
        transports: [
        new DailyRotateFile({
        filename: ‘logs/application-%DATE%.log’,
        datePattern: ‘YYYY-MM-DD’,
        zippedArchive: true,
        maxSize: ‘20m’,
        maxFiles: ‘14d’
        }),
        new transports.Console({ format: format.simple() })
        ]
        });
        logger.info(‘应用启动’, { pid: process.pid });
  • 运行侧托管与实时查看
    • 创建 systemd 服务(/etc/systemd/system/jsapp.service):
      • [Unit]
        Description=Node.js JS App
        After=network.target
        [Service]
        ExecStart=/usr/bin/node /opt/jsapp/app.js
        Restart=always
        User=www-data
        Environment=NODE_ENV=production
        StandardOutput=journal
        StandardError=journal
        SyslogIdentifier=jsapp
        [Install]
        WantedBy=multi-user.target
    • 启用与查看:
      • sudo systemctl daemon-reload
        sudo systemctl enable –now jsapp
        sudo journalctl -u jsapp -f
  • 集中化与可视化
    • 方案A(轻量):rsyslog/filebeat → Elasticsearch → Kibana(创建索引模式如 nodejs-*,在 Discover 中查看)。
    • 方案B(功能全):Logstash 采集文件日志并写入 ES,Kibana 配置仪表盘与告警。

三 集中化与可视化配置要点

  • Logstash 采集文件日志示例(/etc/logstash/conf.d/nodejs.conf):
    • input {
      file {
      path => “/opt/jsapp/logs/*.log”
      start_position => “beginning”
      sincedb_path => “/var/lib/logstash/sincedb-nodejs”
      }
      }
      filter {

      可添加 grok/date 解析,若日志已是 JSON 可省略

      }
      output {
      elasticsearch {
      hosts => [“http://localhost:9200”]
      index => “nodejs-logs-%{+YYYY.MM.dd}”
      }
      }

    • 启动:sudo systemctl restart logstash
  • Kibana 可视化
    • 访问 http://服务器IP:5601 → Management → Stack Management → Index Patterns → 创建索引模式 nodejs-logs-* → 选择时间字段(如 @timestamp)→ Discover 查看与构建图表。

四 日志轮转与容量控制

  • 应用文件日志轮转
    • 使用 winston-daily-rotate-file 控制单文件大小与保留天数(见上例:maxSize、maxFiles),避免无限增长。
  • 系统日志轮转
    • 使用 logrotate 管理 journal 或应用日志文件(/etc/logrotate.d/jsapp):
      • /opt/jsapp/logs/*.log {
        daily
        rotate 14
        compress
        missingok
        notifempty
        copytruncate
        }
    • 测试与强制执行:
      • sudo logrotate -d /etc/logrotate.conf # 语法检查
        sudo logrotate -f /etc/logrotate.d/jsapp # 强制执行
  • 资源与成本优化
    • 合理设置日志级别(如生产用 info/warn,调试再开 debug)。
    • 定期清理旧索引(ES 中设置 ILM 或 Curator),避免磁盘被历史数据占满。

五 常见问题与排查

  • 权限问题:确保运行用户对日志目录(如 /opt/jsapp/logs)具备写权限;服务以 www-data 或专用用户运行。
  • 日志未入库:检查 Logstash 输入路径、文件权限与 sincedb 位置;确认索引模式与时间字段匹配。
  • 实时性差:journalctl 使用 -f 实时跟踪;文件日志用 tail -f;Kibana 刷新间隔与数据延迟需对齐。
  • 磁盘告警:配置 logrotate 保留周期与压缩;监控 /var/log 与 ES 数据目录使用率,设置告警阈值。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/1473374.html

(0)
派派
上一篇 2025-12-16
下一篇 2025-12-16

发表回复

登录后才能评论