首页主机资讯Ubuntu JS日志中如何检测异常流量

Ubuntu JS日志中如何检测异常流量

时间2025-11-28 10:25:03发布访客分类主机资讯浏览545
导读:Ubuntu环境下基于JS日志的异常流量检测 一 日志采集与结构化 在 Node.js 中输出结构化日志,便于后续统计与告警。示例(使用 Winston,日志写入文件便于集中分析): 安装:npm install winston 配置:...

Ubuntu环境下基于JS日志的异常流量检测

一 日志采集与结构化

  • 在 Node.js 中输出结构化日志,便于后续统计与告警。示例(使用 Winston,日志写入文件便于集中分析):
    • 安装:npm install 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' }
      )
        ]
      }
          );
          
      // 请求日志示例(在中间件中)
      app.use((req, res, next) =>
       {
      
        logger.info('http_request', {
      
          ts: new Date().toISOString(),
          ip: req.ip,
          method: req.method,
          url: req.url,
          ua: req.headers['user-agent'],
          status: res.statusCode,
          rt: Date.now() - req.startTime
        }
          );
          
        next();
      
      }
          );
          
      
  • 若使用 PM2 部署,可直接用 pm2 logs < app> 实时查看与采集;如需集中化,可将日志接入 ELK(Elasticsearch/Logstash/Kibana)Graylog 等平台进行检索与可视化。

二 命令行快速检测

  • 实时查看新增日志:tail -f /path/to/combined.log
  • 关键字快速筛选:tail -f /path/to/combined.log | grep 'error'
  • 统计每分钟请求量(按日志行计数,适用于 JSON 每行一条请求的场景):
    • tail -n 10000 /path/to/combined.log | jq -r '.["ts"]' | cut -d'T' -f2 | cut -d'.' -f1 | sort | uniq -c
  • Top N 来源 IP:tail -n 50000 /path/to/combined.log | jq -r '.["ip"]' | sort | uniq -c | sort -nr | head -20
  • 高频异常路径:tail -n 50000 /path/to/combined.log | jq -r '.["url"]' | sort | uniq -c | sort -nr | head -20
  • 5xx 比例(示例):tail -n 10000 /path/to/combined.log | jq 'select(.["status"] > = 500)' | wc -l 与总量对比计算比例
  • 说明:上述命令假设日志为 JSON 行格式;如使用文本格式,可用 awk/grep/sed 按字段位置解析。若日志量大,建议先采样或接入 Logstash/Fluentd 做预处理。

三 模式与阈值示例

  • 异常流量常见信号与处置要点(示例阈值可按业务调整):
    异常信号 日志侧特征 建议阈值示例 处置要点
    流量突发 单位时间请求数骤增 1 分钟请求数 > 基线 或 > 1000 req/min 触发限流/封禁,联动告警
    单 IP 高频 同一 IP 短时间大量请求 1 分钟 > 100 req/min 或 10 分钟 > 500 req 自动封禁该 IP,观察是否回落
    异常路径扫爆 少数路径命中异常高 某路径占比 > 70% 且总量异常 临时禁用路由或返回 429
    错误率飙升 5xx/4xx 比例异常 5xx > 5% 或 4xx+5xx > 10% 回滚版本/限流/扩容
    响应时间异常 P95/P99 明显上升 P95 > 2s 或较基线翻倍 降级非核心功能、排查慢查询
    地理异常 突发来自异常地区 某地区请求占比突增 结合风控策略限制或二次校验
  • 这些信号可通过日志聚合后在 Kibana/Grafana 设置阈值告警,或写入 Prometheus 做指标化监控与动态阈值。

四 实时告警与防护联动

  • 日志到告警链路:
    • 采集与解析:Filebeat/Logstash 读取日志,按 JSON 解析字段(如 ip、method、url、status、ts)。
    • 检测与告警:在 Elasticsearch WatcherKibana AlertingGrafana Alert 中配置规则(如 1 分钟请求数阈值、Top IP 阈值、5xx 比例阈值),触发后通过 Webhook/邮件/企业微信/钉钉 通知。
    • 处置动作:联动 iptables/fail2ban 封禁恶意 IP,或在 Nginx/应用层 返回 429/403;Node.js 侧可结合 express-rate-limit 做二次限流,缓解突发流量冲击。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Ubuntu JS日志中如何检测异常流量
本文地址: https://pptw.com/jishu/758790.html
Ubuntu JS日志中如何监控API调用 如何分析Ubuntu JS日志中的用户行为

游客 回复需填写必要信息