揭秘网易统一日志采集与故障定位平台揭秘:如何在亿级请求中1分钟定位线上异常

在网易,每天有上百亿条日志,覆盖:

  • 游戏服务、直播推流、内容推荐、支付系统等
  • Java、Go、Node.js、Python 多语言服务
  • K8s、VM、边缘服务等多部署场景

但即便如此,网易工程师仍能在1分钟内定位线上故障根因,靠的就是:

一套"日志即信号"的统一采集 + 智能分析 + 多维钻取平台。

本篇带你揭开网易背后这套日志系统的核心设计、真实代码样例和快速定位策略。


一、系统架构总览图(覆盖采集、处理、分析三层)


二、采集层:日志如何进入系统?

网易不同语言服务统一输出 JSON结构日志(规范字段 + traceID):

json 复制代码
{
  "timestamp": "2025-06-04T10:11:00Z",
  "level": "ERROR",
  "service": "payment-service",
  "trace_id": "abc123",
  "message": "支付失败,余额不足",
  "uid": "user_33221",
  "order_id": "ord_8891",
  "env": "prod"
}

LogAgent(Filebeat)配置:

yaml 复制代码
filebeat.inputs:
  - type: log
    paths:
      - /var/logs/*.json
    json.message_key: message
    json.keys_under_root: true

output.kafka:
  hosts: ["kafka1:9092"]
  topic: "netease-logs"

✅ 所有服务统一输出、自动分发,无需开发关心底层采集逻辑。


三、处理层:Kafka + Logstash 动态预处理

网易通过 Logstash 动态 pipeline 处理日志格式、敏感字段脱敏、标准化字段转换:

ini 复制代码
filter {
  mutate {
    rename => { "uid" => "user_id" }
    convert => { "timestamp" => "string" }
  }
  if [level] == "ERROR" {
    mutate { add_tag => ["alert_candidate"] }
  }
}

🚨 同时,打上异常候选 tag,供后续智能报警系统筛选。


四、索引层:ES + Kibana + 二次封装

网易使用 Elasticsearch 建立多维索引:

字段 类型 作用
trace_id keyword 跟踪全链路日志
service keyword 服务维度筛选
uid keyword 用户维度故障排查
message fulltext 模糊搜索关键词
env keyword 环境隔离(测试/预发/生产)

查询样例:查找过去5分钟内"支付失败"的日志

bash 复制代码
GET /netease-logs/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "message": "支付失败" } },
        { "term": { "env": "prod" } }
      ],
      "filter": {
        "range": {
          "timestamp": { "gte": "now-5m", "lte": "now" }
        }
      }
    }
  }
}

五、定位引擎:Trace × Log × Metric 联动分析

网易内部有一套叫 "FaultScanner" 的模块,用来做故障关联分析。

步骤如下:

  1. 📦 用户提交 trace_id
  2. 🔍 搜索对应日志(ES)
  3. 📊 查找对应时间窗口的 metrics(Prometheus)
  4. 🚦 比对是否命中告警规则
  5. 🧠 调用模型:基于历史数据训练的"故障模式匹配器"判断最可能异常点
ini 复制代码
const logs = queryLogByTrace(traceId)
const metrics = queryMetricByTime(logs.timestamp)
const match = faultMatcher.match(logs, metrics)
return match.topSuspectedService

✅ 输出结果样例:

diff 复制代码
故障链路识别结果:
- trace_id: abc123
- 疑似服务:payment-service(延迟波动 + 异常日志)
- 推荐操作:降级 fallback + 限流启动

六、真实案例:如何1分钟定位"支付失败"原因?

  1. 监控告警:"支付成功率 < 95%"

  2. 运维输入 trace_id:abc123

  3. 平台自动串起相关日志:

    • user-service: 正常
    • order-service: 正常
    • payment-service: "ERROR: 余额不足"(15次连续失败)
  4. 快速定位 payment-service 版本问题

  5. 启动灰度回滚流程 + 审计原因归档

耗时:42 秒完成定位 + 30秒处理


七、网易日志平台的高级功能:

功能 描述
日志聚类(Log Clustering) 类似日志自动聚合,减少搜索量
关键路径分析 trace_id + service 路径高亮显示瓶颈
智能摘要 自动摘要错误上下文(前后5条)
用户行为回放 同一 uid 的全链路行为轨迹

彩蛋:

"不是不会出 bug,而是要在用户抱怨前,先发现它。"

相关推荐
Nueuis1 小时前
微信小程序前端面经
前端·微信小程序·小程序
_r0bin_3 小时前
前端面试准备-7
开发语言·前端·javascript·fetch·跨域·class
IT瘾君3 小时前
JavaWeb:前端工程化-Vue
前端·javascript·vue.js
恸流失3 小时前
DJango项目
后端·python·django
potender3 小时前
前端框架Vue
前端·vue.js·前端框架
站在风口的猪11084 小时前
《前端面试题:CSS预处理器(Sass、Less等)》
前端·css·html·less·css3·sass·html5
程序员的世界你不懂4 小时前
(9)-Fiddler抓包-Fiddler如何设置捕获Https会话
前端·https·fiddler
MoFe15 小时前
【.net core】天地图坐标转换为高德地图坐标(WGS84 坐标转 GCJ02 坐标)
java·前端·.netcore
去旅行、在路上5 小时前
chrome使用手机调试触屏web
前端·chrome
互联网搬砖老肖5 小时前
Web 架构相关文章目录(持续更新中)
架构