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 存储 集群管理多种机制可选
  • 支持告警
  • 优秀的可视化效果

整体架构

  1. 探针agent负责进行数据收集,包含tracing和metrics的数据,agent会被安装到服务所在的服务器上,方便数据获取
  2. oap可观测性分析平台,接收探针发送的数据,并在内存中使用分析迎请进行数据整合运算,然后将数据存储到对应的存储介质
  3. ui调用oap提供的接口 获取对应数据

    主要概念

    服务 service
    端点endpoint
    实例instance
    ByteBuddy统计方法调用时间
    java agent会通过虚拟机vm接口来在运行期更改代码
    是java命令的一个参数,参数javaagent用于指定一个jar包

  4. 这个jar的MANIFEST.MF文件必须指定Premain-Class项

  5. Premain-Class指定的那个类必须实现premain()方法

当java虚拟机启动时,在执行main函数之前,jvm会先运行-javaagent所指定jar包内premain-Class这个类的premain方法

Open Tracing

trace是多个span组成的有向无环图DAG,每一个span代表trace中被命名并计时的连续性的执行片段