cat 大众点评
调用链监控系统,基于java开发.实时应用监控 15Wqps
特点:聚合报表丰富,中文支持好,国内案例多
缺点:代码侵入性
国内案例:携程 点评 陆金所
客户端语言:C C++ Python Go Node.js
PinPoint
韩国 java javaAgent机制做字节代码织入 实现加入traceid和获取性能数据目的 对应用代码零侵入
Zipkin
Twitter开源 分布式链路调用监控系统 基于Google的Dapper论文实现
客户端原理:
- 业务线程产生消息,交给消息Producer,消息Producer将消息存放在该业务线程消息栈中
- 业务员线程通知消息Producer消息结束时,消息Producer根据其消费栈产生消息树放置在同步消息队列中
- 消息上报线程监听消息队列,根据消息树产生最终的消息报文上报CAT服务端
API设计
监控api针对场景,监控和性能分析
- 一段代码的执行时间,url执行耗时或sql的执行耗时
- 一段代码的执行次数,java抛出异常记录次数,或一段逻辑的执行次数
- 定期执行某段代码,定期上报一些核心指标
- 关键业务监控指标 监控订单数 交易额 支付成功率
Transaction Event Heartbeat Metric
服务端原理:
消息接收基于NettyNio实现
- 消息接收到服务端就存放内存队列,然后程序开启一个线程消费这个消息做消息分发
- 每个消息都会有一批线程并发消费各自队列的数据,以做到消息处理的隔离
- 消息存储先寸本地磁盘,然后异步上传到HDFS文件,避免强依赖HDFS
存储数据设计
写数据时一份index文件 一份data文件
SkyWalking
apache开源APM项目 javaAgent为微服务架构和云原生架构系统设计.通过探针自动收集指标,进行分布式追踪.
通过这些调用链路以及指标,Skywalking APM会感知应用间关系和服务间关系,并进行相应的指标统计.
支持RPC Dubbo和motan
Springboot Springcloud
apm应用性能管理系统
opentracing通过提供平台无关、厂商无关的api,使得开发人员能够方便的添加或更换追踪系统的实现
skkywalking基于opentracing规范的apm系统
- 多语言自动探针 java .netcore和node.js
- 多种监控手段 语言探针和service mesh
- 轻量高效 不需要额外搭建大数据平台
- 模块化架构 ui 存储 集群管理多种机制可选
- 支持告警
- 优秀的可视化效果
整体架构
- 探针agent负责进行数据收集,包含tracing和metrics的数据,agent会被安装到服务所在的服务器上,方便数据获取
- oap可观测性分析平台,接收探针发送的数据,并在内存中使用分析迎请进行数据整合运算,然后将数据存储到对应的存储介质
-
主要概念
服务 service
端点endpoint
实例instance
ByteBuddy统计方法调用时间
java agent会通过虚拟机vm接口来在运行期更改代码
是java命令的一个参数,参数javaagent用于指定一个jar包 这个jar的MANIFEST.MF文件必须指定Premain-Class项
- Premain-Class指定的那个类必须实现premain()方法
当java虚拟机启动时,在执行main函数之前,jvm会先运行-javaagent所指定jar包内premain-Class这个类的premain方法
Open Tracing
trace是多个span组成的有向无环图DAG,每一个span代表trace中被命名并计时的连续性的执行片段