在项目中监控代码执行的状况。能够採用点评的Cat项目来监控整个项目,可是依照官方的文档来部署cat,总会遇到各种问题,解说的也不够简明清楚,如今用一个单机来部署执行cat监控项目。
首先,到项目的git网页下载整个项目:
https://github.com/dianping/cat
接着就是进入这个项目的文件夹。执行打包安装命令:
mvn clean install -DskipTests (须要maven)
执行完毕后,执行 CAT 安装插件命令:
mvn cat:install
会提示输入mysql数据库的连接信息,账户和password。可能会提示缺少dataappdatascat 文件夹。手动加入就能够了。
最后进入cat-home文件夹:cd cat-home,执行mvn jetty:run
没有不论什么错误的提示就能够启动了。在浏览器输入地址:
localhost:2281会进入界面,这个界面有说明文档还要演示效果等,没什么用。关掉。
进入项目,拷贝/cat-home/target/cat-alpha-1.3.6-SNAPSHOT.war这个文件到tomcat的webapps里面,改动名字成:cat.war。在tomcat所在的盘根文件夹须要有data文件夹,里面有:
dataappdatascat和dataapplogscat 目录,没有的话就手动创建。
dataappdatascat目录里面的内容在mvn cat:install这个步骤会自己主动创建出来client.xml、datasources.xml和server.xml三个文件,datasources.xml是数据库连接信息,不用改变的话就无需改动。client.xml和server.xml两个文件中,有多少台服务器。就要写多少台服务器的地址上去。因为我是在本机上做实验。所以就仅仅有一台机器的地址。
client.xml文件仅仅需改红色框内的内容就能够了:
server.xml文件改红色框的内容,有多台机器。就像红框以下凝视的那样改就能够了。
改动完,启动tomcat(binstartup.bat)
没有不论什么问题。我们能够依据提示在dataapplogscat文件夹中查看到日志。
在浏览器里面输入http://localhost:8080/cat/r,能够看到CAT以下部署后的界面。左上角的“实时”功能才是我们最须要的!
点击后发现都是demo的实例,能够查看对应的代码来学习怎么使用。
在项目的home模块里面的test部分,有个com.dianping.cat.demo.TestStorageMessage类,里
面的代码在我们的界面都能够找到相应的效果。
如sendSQLMsg这种方法。在界面的“Event”监控功能中,会发现监控的名字和方法。
private void sendSQLMsg(String name, String domain, String method, String serverIp) throws InterruptedException { Transaction t = Cat.newTransaction("SQL", "sql.method"); Cat.logEvent("SQL.Method", method); Cat.logEvent("SQL.Database", String.format(JDBC_CONNECTION, serverIp, name)); MessageTree tree = Cat.getManager().getThreadLocalMessageTree(); ((DefaultMessageTree) tree).setDomain(domain); Thread.sleep(500 + new Random().nextInt(1000)); int nextInt = new Random().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));
因此,我们可依据这个非常easy地学习怎么使用。由于Cat项目已经启动了。整个机器都在监控的范围内,编写的项目有指定受cat项目监控便可实现实时监控。分析我们代码的运行效果了。
新建一个project。在project里面增加cat-home argetcat-home-1.3.6-SNAPSHOTWEB-INFlib里面的所有jar包,临时不知道哪些实用,哪些没用,所以所有增加project中是没错的了。
在project里面编写一个类,内容例如以下:
public class MyTest { public static void main(String[] args) { Transaction t = Cat.newTransaction("TEST", "test.method"); Cat.logEvent("Method_test", "good"); Cat.logEvent("Method_event", "bad"); int nextInt = new Random().nextInt(3); if (nextInt % 2 == 0) { t.setStatus(Transaction.SUCCESS); } else { t.setStatus(String.valueOf(nextInt)); } t.complete(); } }
执行。发现非常快就结束了!输入提示看日志。
打开日志,发现有例如以下提示:
[07-20 22:05:34.780] [INFO] [DefaultModuleContext] Starting thread(Cat-ModelService-0) ... [07-20 22:10:08.922] [INFO] [DefaultModuleContext] Starting thread(Cat-ModelService-1) ... [07-20 22:20:00.677] [INFO] [DefaultModuleContext] Current working directory is C:hadoop_java [07-20 22:20:00.699] [INFO] [DefaultClientConfigManager] Global config file(dataappdatascatclient.xml) found. [07-20 22:20:00.700] [INFO] [DefaultClientConfigManager] Can't find app.properties in /META-INF/app.properties [07-20 22:20:00.711] [WARN] [DefaultTransportManager] CAT was DISABLED due to not initialized yet!
提示非常明确,就是没有app.properties这个文件,在项目的说明文档里面也有说到,这个文档主要是指定监控的Cat项目的。由于我们的监控项目改为了cat.war来启动了。所以就在源码的文件夹下加入META-INF文件夹。里面加入app.properties这个文件,内容就是非常easy的:
app.name=cat
这个名称和浏览器里面的domain相应。假设要改成其它名称,那么这个domain的值也要改成相应的名称。
注意:META-INF目录必须改为源文件的指定格式的。
再次执行代码,有例如以下效果,程序不会自己主动关闭了,说明在监控中……
查看日志,一切正常:
[07-20 22:25:58.541] [INFO] [ChannelManager] Connected to CAT server at /127.0.0.1:2280 [07-20 22:25:58.543] [INFO] [ChannelManager] success when init CAT server, new active holderactive future :/127.0.0.1:2280 index:0 ip:127.0.0.1 server config:null [07-20 22:25:58.545] [INFO] [DefaultModuleContext] Thread group(cat) created. [07-20 22:25:58.546] [INFO] [DefaultModuleContext] Starting thread(cat-TcpSocketSender-ChannelManager) ... [07-20 22:25:58.546] [INFO] [DefaultModuleContext] Starting thread(cat-TcpSocketSender) ... [07-20 22:25:58.547] [INFO] [DefaultModuleContext] Starting thread(cat-merge-atomic-task) ... [07-20 22:25:58.557] [INFO] [DefaultModuleContext] Starting thread(cat-StatusUpdateTask) ...
刷新cat页面。发现新建了一个Transaction
和两个event事件了!
到此。应用cat实时监控系统部署成功,剩下的事情就是慢慢研究代码怎么更好地使用Cat了!
==========================================================
有时会发现实时监控页面什么数据都没有显示了。查看日志记录。会发现一大堆找不到10.0.0.1:2280的错误:
这须要我们点击右上角的登陆,用账号和password都是catadmin来登陆。在“配置”的最后一项“全局告警配置”的“client路由”里面改为127.0.0.1:2280后,提交刷新实时页面。数据又回来了!
<?xml version="1.0" encoding="utf-8"?> <router-config backup-server="127.0.0.1" backup-server-port="2280"> <default-server id="127.0.0.1" port="2280" enable="true" weight="1.0"/> </router-config>