在项目中监控代码运行的状况,可以采用点评的Cat项目来监控整个项目,但是按照官方的文档来部署cat,总会遇到各种问题,讲解的也不够简明清楚,现在用一个单机来部署运行cat监控项目。首先,到项目的git网页下载整个项目:接着就是进入这个项目的目录,运行打包安装命令:mvncleaninstall-DskipTests(需要maven)执行完成后,运行CAT安装插件命令:mvncat:install会提示输入mysql数据库的连接信息,账户和密码。可能会提示缺少\data\appdatas\cat目录,手动添加就可以了。最后进入cat-home目录:cdcat-home,运行mvnjetty:run没有任何错误的提示就可以启动了。在浏览器输入地址:localhost:2281会进入界面,这个界面有说明文档还要演示效果等,没什么用,关掉。进入项目,拷贝/cat-home/target/cat-alpha-1.3.6-SNAPSHOT.war这个文件到tomcat的webapps里面,修改名字成:cat.war。在tomcat所在的盘根目录需要有data文件夹,里面有:\data\appdatas\cat和\data\applogs\cat文件夹,没有的话就手动创建。\data\appdatas\cat文件夹里面的内容在mvncat:install这个步骤会自动创建出来client.xml、datasources.xml和server.xml三个文件,datasources.xml是数据库连接信息,不用改变的话就无需修改,client.xml和server.xml两个文件里,有多少台服务器,就要写多少台服务器的地址上去。由于我是在本机上做实验,所以就只有一台机器的地址。client.xml文件只需改红色框内的内容就可以了:server.xml文件改红色框的内容,有多台机器,就像红框下面注释的那样改就可以了。修改完,启动tomcat(bin\startup.bat)没有任何问题,我们可以根据提示在\data\applogs\cat目录中查看到日志。在浏览器里面输入,可以看到CAT下面部署后的界面。左上角的“实时”功能才是我们最需要的!点击后发现都是demo的实例,可以查看相应的代码来学习怎么使用。在项目的home模块里面的test部分,有个com.dianping.cat.demo.TestStorageMessage类,里面的代码在我们的界面都可以找到对应的效果。如sendSQLMsg这个方法,在界面的“Event”监控功能中,会发现监控的名字和方法。privatevoidsendSQLMsg(Stringname,Stringdomain,Stringmethod,StringserverIp)throwsInterruptedException{Transactiont=Cat.newTransaction(SQL,sql.method);Cat.logEvent(SQL.Method,method);Cat.logEvent(SQL.Database,String.format(JDBC_CONNECTION,serverIp,name));MessageTreetree=Cat.getManager().getThreadLocalMessageTree();((DefaultMessageTree)tree).setDomain(domain);Thread.sleep(500+newRandom().nextInt(1000));intnextInt=newRandom().nextInt(3);if(nextInt%2==0){t.setStatus(Transaction.SUCCESS);}else{t.setStatus(String.valueOf(nextInt));}t.complete();}对应代码里面的这两行名称:Cat.logEvent(SQL.Method,method);Cat.logEvent(SQL.Database,String.format(JDBC_CONNECTION,serverIp,name));因此,我们可根据这个很容易地学习怎么使用。因为Cat项目已经启动了,整个机器都在监控的范围内,编写的项目有指定受cat项目监控便可实现实时监控,分析我们代码的执行效果了。新建一个工程,在工程里面加入cat-home\target\cat-home-1.3.6-SNAPSHOT\WEB-INF\lib里面的所有jar包,暂时不知道哪些有用,哪些没用,所以全部加入工程中是没错的了。在工程里面编写一个类,内容如下:publicclassMyTest{publicstaticvoidmain(String[]args){Transactiont=Cat.newTransaction(TEST,test.method);Cat.logEvent(Method_test,good);Cat.logEvent(Method_event,bad);intnextInt=newRandom().nextInt(3);if(nextInt%2==0){t.setStatus(Transaction.SUCCESS);}else{t.setStatus(String.valueOf(nextInt));}t.complete();}}运行,发现很快就结束了!输入提示看日志。打开日志,发现有如下提示:[07-2022:05:34.780][INFO][DefaultModuleContext]Startingthread(Cat-ModelService-0)...[07-2022:10:08.922][INFO][DefaultModuleContext]Startingthread(Cat-ModelService-1)...[07-2022:20:00.677][INFO][DefaultModuleContext]CurrentworkingdirectoryisC:\hadoop_java[07-2022:20:00.699][INFO][DefaultClientConfigManager]Globalconfigfile(\data\appdatas\cat\client.xml)found.[07-2022:20:00.700][INFO][DefaultClientConfigManager]Can'tfindapp.propertiesin/META-INF/app.properties[07-2022:20:00.711][WARN][DefaultTransportManager]CATwasDISABLEDduetonotinitializedyet!提示很明白,就是没有app.properties这个文件,在项目的说明文档里面也有说到,这个文档主要是指定监控的Cat项目的。因为我们的监控项目改为了cat.war来启动了,所以就在源代码的目录下添加META-INF文件夹,里面添加app.properties这个文件,内容就是很简单的:app.name=cat这个名称和浏览器里面的domain对应,如果要改成其他名称,那么这个domain的值也要改成对应的名称。注意:META-INF文件夹必须改为源文件的指定格式的。再次运行代码,有如下效果,程序不会自动关闭了,说明在监控中……查看日志,一切正常:[07-2022:25:58.541][INFO][ChannelManager]ConnectedtoCATserverat/127.0.0.1:2280[07-2022:25:58.543][INFO][ChannelManager]successwheninitCATserver,newactiveholderactivefuture:/127.0.0.1:2280index:0ip:127.0.0.1serverconfig:null[07-2022:25:58.545][INFO][DefaultModuleContext]Threadgroup(cat)created.[07-2022:25:58.546][INFO][DefaultModuleContext]Startingthread(cat-TcpSocketSender-ChannelManager)...[07-2022:25:58.546][INFO][DefaultModuleContext]Startingthread(cat-TcpSocketSender)...[07-2022:25:58.547][INFO][DefaultModuleContext]Startingthread(cat-merge-atomic-task)...[07-2022:25:58.557][INFO][DefaultModuleContext]Startingthread(cat-StatusUpdateTask)...刷新cat页面,发现新建了一个Transaction和两个event事件了!到此,应用cat实时监控系统部署成功,剩下的事情就是慢慢研究代码怎么更好地使用Cat了!==========================================================有时会发现实时监控页面什么数据都没有显示了,查看日志记录,会发现一大堆找不到10.0.0.1:2280的错误:这需要我们点击右上角的登陆,用账号和密码都是catadmin来登陆,在“配置”的最后一项“全局告警配置”的“客户端路由”里面改为127.0.0.1:2280后,提交刷新实时页面,数据又回来了!?xmlversion=1.0encoding=utf-8?router-configbackup-server=127.0.0.1backup-server-port=2280default-serverid=127.0.0.1port=2280enable=trueweight=1.0//router-config