springboot|springboot 集成 CAT 做系统监控

本贴最后更新于 1807 天前,其中的信息可能已经时过境迁

javaDEMO

本网站记录了最全的各种 JavaDEMO ,保证下载,复制就是可用的,包括基础的, 集合的, spring 的, Mybatis 的等等各种,助力你从菜鸟到大牛,记得收藏哦~~
https://www.javastudy.cloud

CAT 总述

官方参考地址:
https://github.com/dianping/cat
CAT 是大众点评开源一款监控组件,这款监控以整体监控为主,即不能对每个请求,远程调用都做详细记录,只保留了错误的,长调用等典型的调用以供开发人员查看
CAT 中大致就两大部分, 一个是服务端,需要连接数据库, 一个就是发送数据的客户端

CAT 服务端搭建

服务端我们依然选用 Docker 来搭建,先把 cat 整个项目下载从官网下载下来,地址:https://codeload.github.com/dianping/cat/zip/master

数据库配置

在数据库中创建一个名为 cat 的数据库
可使用 sql 语句,也可以用可视化界面,注意编码要选 utf8mb4

create schema cat default character set = utf8mb4;

然后把 script/CatApplication.sql 导入到数据库中
image.png
导入之后的表结构,如下图所示:
image.png

修改 docker 配置文件

然后我们需要修改以下配置文件

  1. client.xml
    修改 ip 为自己电脑的 ip
<?xml version="1.0" encoding="utf-8"?>
<config mode="client">
    <servers>
        <server ip="192.168.40.107" port="2280" http-port="8080"/>
    </servers>
</config>
  1. datasources.xml
    这里要注意!!!! 一定要使用 mysql 5.7 的版本!!!!!
    中间的 url, user, password , 换成自己数据库的地址,用户名和密码
<properties>
            <driver>com.mysql.jdbc.Driver</driver>
            <url><![CDATA[jdbc:mysql://192.168.40.107:33309/cat]]></url>
            <user>root</user>
            <password>javastudy</password>
            <connectionProperties><![CDATA[useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&socketTimeout=120000]]></connectionProperties>
        </properties>
  1. Dockerfile
    50 行下面添加
ADD docker/client.xml /data/appdatas/cat/client.xml

把第 51 行的 ADD docker/datasources.sh /datasources.sh 删掉,因为这个是搜索 jdbc-url,user,passwd 把这些改成用环境变量来传递,我们上面改过 datasources.xml 之后,就不用这个了
最后两行, 改成:

# 端口加一个 2280
EXPOSE 8080 2280
# 执行tomcat的启动命令
CMD catalina.sh run

从 45 行开始的 Dockerfile 如下:
image.png

开始 docker 镜像文件构建

这里要注意了, 要在 cat-master 目录执行这个命令

# 在dockerfile 的上级目录,也就是cat-master这个目录执行这个命令
# 用 -f 指定dockerFile的路径
docker build -f  docker/Dockerfile   -t cat:0.1 .

因为是从源码来编译,下载依赖,所以过程会有些慢
最后可看到已成功打好镜像
image.png

运行镜像

# 需要绑定两个端口,8080 和 2280
docker run -d --name cat-server -p 8080:8080 -p 2280:2280 cat:0.1

浏览器输入地址: http://192.168.40.107:8080/cat/r 可看到 CAT 界面
image.png

CAT 客户端

CAT 客户端只有几以下几个部分组成

  1. 引入 CAT 的依赖
  2. 针对要监控的不同模块,做不同的集成方案
    可集成的模块可参考以下文档:
    https://github.com/dianping/cat/tree/master/integration , 这里我们以 springboot 为例

添加 cat 依赖

这里要注意,cat-client 并没有发布到中央仓库,有两种方法:
一.把 cat-client.jar 下载下来,然后上传到自己的私服
二.配置 unidal 的仓库地址:

repositories {

	mavenCentral()
	//重点在这里,添加unidal的地址
	maven {
		url 'http://unidal.org/nexus/content/repositories/releases/'
	}
}

在原有 web 的基础上 Cat 只用添加这一个依赖就可以了

compile group: 'com.dianping.cat', name: 'cat-client', version: '3.0.0'

完整依赖如图:
image.png

添加测试的 Controller 代码

因为 cat 已启用 8080 端口,所以这里把程序端口改成了 9090

server.port=9090

测试的 Controller 代码

@RestController
public class TestController {
    
    @GetMapping("testCat")
    public String testCat(){
        return "in testCat";
    }
}

整合进 Cat 的代码

Cat 与 springboot,web 的集成以过滤器的形式,我们在 Main 函数所在类中中添加:

@Bean
	public FilterRegistrationBean catFilter() {

		FilterRegistrationBean registration = new FilterRegistrationBean();
		CatFilter filter = new CatFilter();
		registration.setFilter(filter);
		registration.addUrlPatterns("/*");
		registration.setName("cat-filter");
		registration.setOrder(1);
		return registration;
	}

在客户端配置 cat 服务端信息

现在要告诉客户端,服务端在哪里, 信息要往哪里发送
1.新建 app.properties
image.png
如上图,在 resources 下新建 META-INF 文件夹,然后新建 app.properties 文件

#  向cat 指定自己应用的名称
app.name=java-study

2.在电脑中建一个 cat 文件夹,把源码中的 docker/client.xml 拷贝到 cat 文件夹下
image.png
client.xml 内容如下:
指定 cat 服务器的相关信息

<?xml version="1.0" encoding="utf-8"?>
<config mode="client">
    <servers>
        <server ip="192.168.40.107" port="2280" http-port="8080"/>
    </servers>
</config>
  1. 配置运行项

image.png

image.png

在 idea 右上角运行配置中,设置 CAT_HOME 变量,指向我们刚才建 cat 目录的位置
然后运行

结果测试

在浏览器输入 http://localhost:9090/testCat 能看到相应的返回结果.
image.png

在 Cat 面板中
image.png
点进去可看到详情
image.png

DEMO 总评

CAT 的官方文档比较少,深入集成的坑比较多,但是 CAT 功能又是非常之强大,要注意 CAT_HOME 的坑, 要注意 Mysql 版本的坑, 等等, 同样, 本 DEMO 只用于学习测试, 在生产环境,还需要集群式部署 cat,加油吧,少年!!

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3186 引用 • 8212 回帖 • 1 关注
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    942 引用 • 1459 回帖 • 31 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...