货拉拉全链路监控体系的落地与实践
以下文章来源于 DataFunSummit,作者曹伟

DataFunSummit
DataFun 社区旗下账号,专注于分享大数据、人工智能领域行业峰会信息和嘉宾演讲内容,定期提供资料合集下载。

01 监控演进史
首先和大家分享下互联网行业监控的演进史。

首先我们看一下整个监控行业的演进历史。
- 2002 年:eBay 的 CAL 全链路监控产品,由前资深架构师吴其敏主导研发,在 eBay 内部被大面积运用。
- 2010 年:谷歌的 Dapper,虽然没有开源,但发表了 Dapper 论文,成为后续很多监控产品的鼻祖。同年,商用产品 Datadog 出现,功能全面,成为行业标杆。
- 2011 年:吴其敏从 eBay 离职来到美团,开发了 CAT,相当于 CAL 的 Java 版实现,并在开源领域发扬光大。
- 2012 年:Twitter 开发了 Zipkin,相当于 Dapper 的开源实现。同年,阿里开发了 Eagleye(鹰眼)监控,韩国的 Pinpoint 也出现了,基于字节码增强技术实现监控数据埋点。
- 2014 年:饿了么开发了 EMonitor,用户体验和排障思路引导做得非常好。
- 2015 年:华为的吴晟开发了 SkyWalking 并开源,加入了 Apache 基金会,受到中小型公司的追捧。
- 2016 年:Uber 的 Jaeger 基于 Go 语言实现,滴滴内部也在使用,目前也已开源。

02 货拉拉监控体系演进史
货拉拉的监控演进史分为三大阶段:
-
监控 1.0 时期
各业务团队独立维护一套 Prometheus 监控体系,缺乏全链路 Trace 监控,效率极低。 -
监控 2.0 时期
开始制定标准并逐步统一监控,推进业务基础监控全覆盖,得益于字节码增强技术,实现业务“零代码”改造快速接入基础监控。 -
监控 3.0 时期
针对各个监控领域专项做深度迭代和打磨,实现错、慢、核心服务完整全采样,存储成本降低 60%。 -
监控 3.x 时期
完成指标瘦身,自研 Prometheus 集群 manager,将 Trace 存储从 HBase 切换到 KV 存储,存储成本降低 90%。
03 货拉拉监控体系架构

货拉拉 3.x 的架构图如下:
- 底层:Prometheus 负责从多个维度采集数据,并上报到 VictoriaMetrics 集群。
- 中间层:VictoriaMetrics 集群负责计算分析,供上层展示和智能告警。
- 上层:ES、HBase、Kafka 为上层 Trace 服务提供存储和计算能力。
04 监控埋点“弯道超车”
1. 字节码增强技术介绍

字节码增强技术分为两部分:
- 字节码增强框架:负责修改字节码。
- Java Agent:负责使修改后的字节码生效。
2. 字节码增强框架选型
主流框架有 ASM、Javassist 和 ByteBuddy。货拉拉最终选择了 ByteBuddy。
3. 字节码增强生效机制说明
字节码修改通过 Java Agent 技术实现,主要有两种方式:
- 加载时修改:在 Class 文件加载过程中触发拦截,修改字节码后加载到 JVM。
- 运行时修改:从 JVM 中获取已加载的 Class 数据,修改后覆盖原数据。
05 全链路 Trace 建设
1. Trace 1.0 架构

直接使用原生 SkyWalking 的架构,数据存放在 ES 中,但随着业务增长,ES 的水平扩展成本较高。
2. Trace 2.0 架构

- 数据采集和消费拆分:数据发送给 Kafka,由 Kafka 消费做数据分析和存储。
- 数据存储:数据存放在 HBase 中,ES 作为索引使用。
3. Trace 3.0 架构

通过更精细化的 Trace 采样解决存储成本问题。
4. Trace 3.x 架构

- 自研 KV 存储取代 HBase:存储和计算成本大幅降低。
- 保障 Trace 链路的完整性:通过 Kafka 延迟消费 + BloomFilter 实现完整采样。
06 可视化建设 - “所见即所得”

通过打通 Metric、Trace、Log 和业务数据,实现所见即所得的顺滑排障体验。
07 总结
- 价值层面:全量监控体系大幅提升全局稳定性,帮助快速定位问题,提升微服务治理能力。
- 发展角度:后续将自研存储,研究根因分析,提高排障效率。
- 开源回馈:货拉拉平台基于开源产品搭建,希望有机会回馈开源社区。
今天的分享就到这里,谢谢大家。
end
