调用链监控 CAT 之 入门
简介
CAT 是一个实时和接近全量的监控系统,它侧重于对Java应用的监控,基本接入了美团上海所有核心应用。目前在中间件(MVC、RPC、数据库、缓存等)框架中得到广泛应用,为美团各业务线提供系统的性能指标、健康状况、监控告警等。
优势
- 实时处理:信息的价值会随时间锐减,尤其是事故处理过程中。
- 全量数据:全量采集指标数据,便于深度分析故障案例。
- 高可用:故障的还原与问题定位,需要高可用监控来支撑。
- 故障容忍:故障不影响业务正常运转、对业务透明。
- 高吞吐:海量监控数据的收集,需要高吞吐能力做保证。
- 可扩展:支持分布式、跨 IDC 部署,横向扩展的监控系统。
开源产品比较

快速上手
本地部署
步骤1:部署tomcat
准备一个tomcat,修改 tomcat conf 目录下 server.xml,防中文乱码。
Connector port="8080" protocol="HTTP/1.1"
URIEncoding="utf-8" connectionTimeout="20000"
redirectPort="8443" /> <!-- 增加 URIEncoding="utf-8" -->
步骤2:程序对于/data/目录具体读写权限(重要)
Linux
要求/data/目录能进行读写操作,如果/data/目录不能写,建议使用linux的软链接链接到一个固定可写的目录。
此目录会存一些CAT必要的配置文件以及运行时候的数据存储目录。
CAT支持CAT_HOME环境变量,可以通过JVM参数修改默认的路径。
mkdir /data
chmod -R 777 /data/
- Windows
对程序运行盘下的/data/appdatas/cat和/data/applogs/cat有读写权限。例如cat服务运行在e盘的tomcat中,则需要对e:/data/appdatas/cat和e:/data/applogs/cat有读写权限。
步骤3: 配置/data/appdatas/cat/client.xml ($CAT_HOME/client.xml)
<?xml version="1.0" encoding="utf-8"?>
<config mode="client">
<servers>
<server ip="127.0.0.1" port="2280" http-port="8080"/>
</servers>
</config>
此配置文件的作用是所有的客户端都需要一个地址指向CAT的服务端。
步骤4: 安装CAT的数据库
下载cat源码包:https://codeload.github.com/dianping/cat/
解压后,数据库的脚本文件为 script/CatApplication.sql
mysql -uroot -Dcat < CatApplication.sql
步骤5: 配置/data/appdatas/cat/datasources.xml($CAT_HOME/datasources.xml)
<?xml version="1.0" encoding="utf-8"?>
<data-sources>
<data-source id="cat">
<maximum-pool-size>3</maximum-pool-size>
<connection-timeout>1s</connection-timeout>
<idle-timeout>10m</idle-timeout>
<statement-cache-size>1000</statement-cache-size>
<properties>
<driver>com.mysql.jdbc.Driver</driver>
<url><![CDATA[jdbc:mysql://127.0.0.1:3306/cat]]></url> <!-- 请替换为真实数据库URL及Port -->
<user>root</user> <!-- 请替换为真实数据库用户名 -->
<password>root</password> <!-- 请替换为真实数据库密码 -->
<connectionProperties><![CDATA[useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&socketTimeout=120000]]></connectionProperties>
</properties>
</data-source>
</data-sources>
步骤6: war打包
重命名为cat.war进行部署,注意此war是用jdk8,服务端请使用jdk8版本
步骤7: war部署
- 将上一步打包的war包部署到本机tomcat的webapps下。
- 启动tomcat,打开控制台的URL,http://127.0.0.1:8080/cat/s/config?op=routerConfigUpdate 默认用户名:admin 默认密码:admin 。
- 配置客户端路由。
<?xml version="1.0" encoding="utf-8"?>
<router-config backup-server="你的本机ip(不要用127.0.0.1)" backup-server-port="2280">
<default-server id="你的本机ip(不要用127.0.0.1)" weight="1.0" port="2280" enable="true"/>
<network-policy id="default" title="默认" block="false" server-group="default_group">
</network-policy>
<server-group id="default_group" title="default-group">
<group-server id="你的本机ip(不要用127.0.0.1)"/>
</server-group>
<domain id="cat">
<group id="default">
<server id="你的本机ip(不要用127.0.0.1)" port="2280" weight="1.0"/>
</group>
</domain>
</router-config>
提交后,重启tomcat,访问http://127.0.0.1:8080/cat,出现如下界面,说明搭建成功。

测试
安装jar包
进入cat源码包的 lib/java/jar ,将cat-client-3.0.0.jar 包 安装到本地maven仓库。
mvn install:install-file -DgroupId=com.dianping.cat -DartifactId=cat-client Dversion=3.0.0 -Dpackaging=jar -Dfile=cat-client-3.0.0.jar
创建工程
创建一个springboot 工程,关键代码如下。
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.dianping.cat</groupId>
<artifactId>cat-client</artifactId>
<version>3.0.0</version>
</dependency>
app.properties
需要在你的项目中创建 src/main/resources/META-INF/app.properties 文件, 并添加如下内容:
app.name={appkey}
appkey 只能包含英文字母 (a-z, A-Z)、数字 (0-9)、下划线 (_) 和中划线 (-)
application.yml
server:
port: 8760
spring:
application:
name: cat-simple
启动类
@SpringBootApplication
@RestController
public class CatSimpleApplication {
public static void main(String[] args) {
SpringApplication.run( CatSimpleApplication.class, args );
}
@PostMapping("/hi")
public String hi(HttpServletRequest request){
String url = request.getRequestURL().toString();
// 创建一个 Transaction
Transaction transaction = Cat.newTransaction( "URL", url );
try {
// 处理业务
myBusiness();
// 设置状态
transaction.setStatus(Transaction.SUCCESS);
} catch (Exception e) {
// 设置错误状态
transaction.setStatus(e);
// 记录错误信息
Cat.logError(e);
} finally {
// 结束 Transaction
transaction.complete();
}
return "hello";
}
@PostMapping("/error")
public String error(HttpServletRequest request){
String url = request.getRequestURL().toString();
// 创建一个 Transaction
Transaction transaction = Cat.newTransaction( "URL", url );
try {
// 处理业务
int i = 1 / 0;
// 设置状态
transaction.setStatus(Transaction.SUCCESS);
} catch (Exception e) {
// 设置错误状态
transaction.setStatus(e);
// 记录错误信息
Cat.logError(e);
} finally {
// 结束 Transaction
transaction.complete();
}
return "500";
}
private void myBusiness() {
//模拟业务处理的时间
try {
Thread.sleep( 500 );
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
curl -X POST http://localhost:8760/hi
请求 http://localhost:8760/error
curl -X POST http://localhost:8760/error
查看监控信息
进入 cat 控制台,点击 Transaction 按钮 ,之后点击全部,会看到有哪些客户端,如图:

点击客户端 cat-simple ,出现如图:

如上图,可以清晰的看到 请求的 总个数(tatal)、均值(avg)、最大/最小(max/min)、标准差(std)等,其他都比较直观,标准差稍微复杂一点,大家自己可以推演一下怎么做增量计算。那集合运算,比如95线(表示95%请求的完成时间)、999线(表示99.9%请求的完成时间)
点击 “log View” 可以查看 错误信息,如图:

源码
https://github.com/gf-huanchupk/SpringCloudLearning/tree/master/chapter14
参考
https://github.com/dianping/cat/wiki
欢迎扫码或微信搜索公众号《程序员果果》关注我,关注有惊喜~

调用链监控 CAT 之 入门的更多相关文章
- 第四模块 :微服务调用链监控CAT架构和实践
采样率:每一个请求为都进行记录,或者100次请求为记录50次 各个开源框架都满足opentracing的标准,只要使用opentracing标准埋点的客户端,可以使用不同的客户端去展示,opentra ...
- 调用链监控 CAT 之 URL埋点实践
URL监控埋点作用 一个http请求来了之后,会自动打点,能够记录每个url的访问情况,并将以此请求后续的调用链路串起来,可以在cat上查看logview 可以在cat Transaction及Eve ...
- Spring Cloud Alibaba 实战(十三) - Sleuth调用链监控
本文概要:大白话剖析调用链监控原理,然后学习Sleuth,Zipkin,然后将Sleuth整合Zipkin,最后学习Zipkin数据持久化(Elasticsearch)以及Zipkin依赖关系图 实战 ...
- dubbo+zipkin调用链监控(二)
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- .Net Core 商城微服务项目系列(十):使用SkyWalking构建调用链监控(2019-02-13 13:25)
SkyWalking的安装和简单使用已经在前面一篇介绍过了,本篇我们将在商城中添加SkyWalking构建调用链监控. 顺带一下怎么把ES设置为Windows服务,cd到ES的bin文件夹,运行ela ...
- dubbo+zipkin调用链监控
分布式环境下,对于线上出现问题往往比单体应用要复杂的多,原因是前端的一个请求可能对应后端多个系统的多个请求,错综复杂. 对于快速问题定位,我们一般希望是这样的: 从下到下关键节点的日志,入参,出差,异 ...
- 大众美团服务链监控CAT
github链接:https://github.com/dianping/cat CAT 作为服务端项目基础组件,提供了 Java, C/C++, Node.js, Python, Go 等多语言客户 ...
- springboot 项目添加jaeger调用链监控
1.添加maven依赖<dependency> <groupId>io.opentracing.contrib</groupId> <artifactId&g ...
- 五分钟后,你将学会在SpringBoot项目中如何集成CAT调用链
买买买结算系统 一年一度的双十一购物狂欢节就要到了,又到剁手党们开始表演的时刻了.当我们把种草很久的商品放入购物车以后,点击"结算"按钮时,就来到了买买买必不可少的结算页面了.让我 ...
随机推荐
- 系统的讲解 - PHP WEB 安全防御
目录 常见漏洞 SQL注入攻击 XSS攻击 SSRF攻击 CSRF攻击 文件上传漏洞 信息泄露 越权 设计缺陷 小结 常见漏洞 看到上图的漏洞是不是特别熟悉,如果不进行及时防御,就会产生蝴蝶效应. 往 ...
- Windows核心编程第二章,字符串的表示以及宽窄字符的转换
目录 Windows核心编程,字符串的表示以及宽窄字符的转换 1.字符集 1.1.双字节字符集DBCS 1.2 Unicode字符集 1.3 UTF-8编码 1.4 UTF - 32编码. 1.5 U ...
- EF的应用
EF是 EntityFramework 的简称.在程序和数据库交互的过程中,起到了极大的方便. EF的使用 首先在需要使用EF的项目单击,然后 Ctrl+Shift+a 找到ADO.NET实体数据模型 ...
- 2.SDL规范文档
01.安全设计Checklist 输入验证 校验跨信任边界传递的不可信数据(策略检查数据合法性,含白名单机制等)格式化字符串时,依然要检验用户输入的合法性,避免可造成系统信息泄露或者拒绝服务 禁止向J ...
- 安卓4.0以上系统怎么不用root激活XPOSED框架的方法
在大多单位的引流或业务操作中,基本上都需要使用安卓的高端技术Xposed框架,近期,我们单位购买了一批新的安卓4.0以上系统,基本上都都是基于7.0以上版本,基本上都不能够刷入root超级权限,即便是 ...
- Android 初次进入默认不弹出软键盘
[遇到问题] 初次进入某个界面时,当页面中有EditText ,会自动聚焦并弹出软键盘. [解决方法] getWindow().setSoftInputMode(WindowManager.Layou ...
- Win10下搭建Git服务器
一. 搭建Git服务器环境前的必要准备 1.Windows10 2.Java环境 3.GitBlit服务器 4.Git版本管理工具 二. 开始搭建 第一步.安装JAVA运行环境 https://www ...
- 对比 Git 与 SVN,这篇讲的很易懂
---恢复内容开始--- 欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯工蜂发表于云+社区专栏 导语 本文从 Git 与 SVN 的对比入手,介绍如何通过 Git-SVN 开始 ...
- vue2.0 日历日程表 ,可进行二次开发.
由于工作业务需求,要写一个日程表,日程表写之前 要先生成日历,废话不多说,直接 上代码: <!DOCTYPE html> <html lang="zh-CN"&g ...
- 腾讯云服务器搭建Apache/PHP/MySQL环境
软件环境 Windows Server 2008 R2 企业版 SP1 64位 刚刚进入 Windows Server ,你会看到以下界面: 列出了服务器的基础信息和常用配置 下载 XAMPP htt ...