49
CAT (Central Application Tracking) 众点评、架构组、尤勇 微博:DP尤勇

! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

  • Upload
    others

  • View
    41

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

!  CAT���(Central Application Tracking)

⼤大众点评、架构组、尤勇 微博:DP尤勇

Page 2: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

⼤大纲!   CAT背景

!   CAT介绍

!   CAT报表

!   CAT设计

!   CAT案例

!   CAT总结

Page 3: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

⼤大纲

!  CAT背景 !   CAT介绍

!   CAT报表

!   CAT设计

!   实际案例

!   CAT总结

Page 4: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

小米+步枪

!   Java迁移初期,2009-2010年

!   Cacti、Nagios ...

!   Bug Email

!   Error Logs

Page 5: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

趟过的坑!   SOA之后多个应用同时报错,不知道是哪个出错了

!  ⼤大量报错,需要花很久时间才能定位 !  很多问题最终都说可能是⽹网络问题 !   项目出现⼀一堆异常根本不关⼼心

!  Mobile⼀一开始上线⼀一天就⼏几⼗十到上百万异常 !   调用缓存、数据库基本是⿊黑盒⼦子

!  ⼀一次将线上的库配置到了Beta,花了整个通宵排错

Page 6: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

监控背景

!   Hawk监控

!   典型基于Key-Value的日志监控模型

!   完成了异常,cache,sql等监控

!   CAT监控

!   eBay的CAL取得了巨⼤大成功

Page 7: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

监控分层

!   业务监控 !   通过⼏几个核⼼心指标来确定业务正常

!   应用监控 !   通过监控应用运⾏行指标来确定应用健康状况(URL\CALL\Cache\SQL等)

!   系统监控 !   监控系统的运⾏行指标 !   CPU、Memory、IO !   Zabbix,Cacti

Page 8: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

监控作用

减少线上故障发现时间(OP) 减少线上故障定位时间(OP) 帮助应用程序进⾏行优化(PD)

Page 9: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

⼤大纲!   CAT背景

!  CAT介绍 !   CAT报表

!   CAT设计

!   CAT案例

!   CAT总结

Page 10: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

CAT简介

!   CAT(Central Application Tracking)是基于Java开发的实时应用监控平台,为⼤大众点评⽹网提供了全面的监控服务和决策支持。

!   CAT作为⼤大众点评⽹网基础监控组件,它已经在中间件框架(MVC框架,RPC框架,数据库框架,缓存框架等)中得到⼴广泛应用,为点评各业务线提供系统的性能指标、健康状况、基础告警等。

Page 11: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

CAT现状!   集成中间件产品(RPC、SQL、Cache等)

!   5台CAT物理监控集群

!   200+ 业务应用(包括部分.net以及Job)

!   900+ 应用服务器

!   ~6TB 消息⼤大小,~50亿消息(每天)

!   ~800GB 存储(每天,压缩后)2013-09

Page 12: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

CAT的Logview !   消息头

!   版本号,消息ID,所属业务,IP,所在线程,根消息ID

!   消息体

Page 13: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

可视化的Logview

Page 14: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

分布式Logview

Page 15: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

⼤大纲

!   CAT背景

!   CAT介绍

!  CAT报表 !   CAT设计

!   CAT案例

!   CAT总结

Page 16: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

CAT报表!   Transaction

!   ⼀一段代码运⾏行时间、次数,比如URL、Cache、SQL执⾏行次数和响应时间

!   Problem !   系统可能出现的异常,包括访问较慢的程序等

!   Heartbeat !   JVM内部⼀一些状态信息,Memory,Thread等

!   Dependency !   系统之间实时调用数据信息,包括远程服务、数据库、缓存等

Page 17: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

!   Metric !   业务监控报表

!   Matrix !   ⼀一个请求调用链路统计

!   Event !   记录程序中⼀一个时间执⾏行的次数,比如异常等

!   Cross !   SOA系统用关于RPC调用的报表

!   State !   CAT自身状态监控,包括处理消息数、丢失消息

!   ...

Page 18: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

Transaction报表

Page 19: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

具体URL报表

Page 20: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

URL趋势!   时间分布

!   响应时间分布

!   访问量分布

!   错误量分布

Page 21: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

Problem报表

Page 22: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

Heartbeat报表

Page 23: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

Matrix报表

!   远程调用、sql调用、缓存调用最多排⾏行

!   ⼀一次的页面中,最多调用远端服务14791次,这个是需要优化的地⽅方。

Page 24: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

Cross报表!   统计粒度支持项目、具体某⼀一IP、具体的服务⽅方法

!   客户端调用

!   客户端会调用Swallow,UserBaseService,SmsServer,MailServer

Page 25: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

Cross报表

Page 26: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

Dependency报表

!   圆形->服务

!   ⽅方框->数据库

!   菱形->缓存

!   红⾊色-> Error

!   黄⾊色-> warning

!   绿⾊色-> OK

Page 27: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

应用监控⼤大盘

Page 28: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

业务监控⼤大盘v1.0

Page 29: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

⼤大纲!   CAT背景

!   CAT介绍

!   CAT报表

!  CAT设计 !   CAT案例

!   CAT总结

Page 30: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

CAT设计!   监控系统指标

!   监控API

!   客户端设计

!   服务端设计

!   物理部署

!   数据建模

Page 31: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

监控系统指标

!  对应用⽆无影响(服务端上线、宕机等)

!  实时性(消息尽快到达服务端)

!  吞吐量(服务端⾼高的吞吐量)

!  开销低(客户端尽可能开销低)(开销2%以内)

!  可靠性(消息100%到达服务端)

!  服务端处理100%的到达消息

Page 32: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

监控领域建模

⼀一段代码执⾏行时间

⼀一段代码执⾏行次数

定期执⾏行某些代码

⼀一个指标的变化值

url/sql响应时间

Exception出现次数

分钟粒度Cpu,IO

监控销售额

Transaction

Event

Heartbeat

Metric

Page 33: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

监控API

Page 34: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

客户端设计

开始

HttpThread

结束

Call

SQL Cache

e ......

创建消息树

ThreadContext

创建Call节点

加⼊入SQL节点

加⼊入Cache节点

.....

消息构建结束

Sender

threads

Message Queue

Sender Sender

Server Server

Server

Page 35: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

客户端需要注意问题!   内存开销

!   不恰当埋点⽅方式,消息⾜足够⼤大

!   CPU开销

!   构建消息⾜足够轻量

!   异步发送消息

!   异常状况

!   ⽹网络问题

!   服务端宕机

Page 36: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

服务端设计

监控消息 异步发送

消息消费机

Receiver

threads

File 消息转储 异步线程

统计报表

Queues

将多线程任务转换单线程处理模型

应用A

应用B

应用C

Receiver

Receiver

Analyzer

threads

Analyzer

Analyzer

Page 37: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

服务端注意的问题

!   消息处理速度,每秒处理5w+消息 !   Calendar,SimpleDateFormat !   Line95计算 !   List的转化为Map

!   复杂任务异步化 !   消息存储,消息压缩,消息传输

!   自身监控,容量评估

Page 38: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

部署

应用A

应用B

应用C

TCP

消费机

消费机

控制台

控制台

Logview Report

实时数据查询

历史数据查询

Consumers Consoles

Page 39: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

数据建模

!   目标模型定义

!   访问、转换和合并

!   模型持久化

!   XML, JSON, Binary...

!   代码⽣生成

Page 40: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

⼤大纲!   CAT背景

!   CAT介绍

!   CAT报表

!   CAT设计

!  CAT案例 !   CAT总结

Page 41: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

故障定位

!   收到告警

!   tuangou-web logscan 发出⼤大量告警

!   zabbix review-service FGC 告警

!   zabbix tuangou-web error 告警

!   zabbix mobile-api error 告警

Page 42: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

第⼀一步:监控⼤大盘!   V0.1时候的监控⼤大盘

Page 43: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

第⼆二步:点击TuanGouWeb

Page 44: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

第三步:点击Review

!   发现依赖调用ReviewServer的所有项目都报错

!   cache-server和dianpingcomm库的调用异常,可能是cache有关操作引起的。root case也确实如此

Page 45: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

⼤大纲!   CAT背景

!   CAT介绍

!   CAT报表

!   CAT设计

!   CAT案例

!  CAT总结

Page 46: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

CAT项目总结!   1年半时间,2-3个⼈人

!   持续集成,持续发布,不断监控

!   单机开发和调试

!   Everything Fails

!   尽可能的减少配置

!   关注客户,快速响应

Page 47: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

CAT Future

!   Open Source(http://github.com/dianping/cat)

!   Code Clean

!   Remove Dependency

!   Document

!   TestCase

Page 48: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

QA

!   Thanks

Page 49: ! CAT · 量报错 ,需要花很久时间才能定位"! 很多问题最终都说可能是络问题 "! ... JVM内部些状态信息 ,Memory,Thread等"! Dependency"! 系统之间实时调用数据信息,包括远程服务、数

业务

应用

系统