原文地址:http://www.bubuko.com/infodetail-986338.html
部署項目,在項目中監控代碼運行的狀況,可以采用點評的Cat項目來監控整個項目,但是按照官方的文檔來部署cat,總會遇到各種問題,講解的也不夠簡明清楚,現在用一個單機來部署運行cat監控項目。
首先,到項目的git網頁下載整個項目:
點對點疫情防控?https://github.com/dianping/cat
接著就是進入這個項目的目錄,運行打包安裝命令:
mvn?clean?install?-DskipTests??(需要maven)
執行完成后,運行?CAT?安裝插件命令:
mvn?cat:install
會提示輸入mysql數據庫的連接信息,賬戶和密碼。可能會提示缺少\data\appdatas\cat?目錄,手動添加就可以了。
最后進入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文件夾,里面有:
\data\appdatas\cat和\data\applogs\cat?文件夾,沒有的話就手動創建。
\data\appdatas\cat文件夾里面的內容在mvn?cat:install這個步驟會自動創建出來client.xml、datasources.xml和server.xml三個文件,datasources.xml是數據庫連接信息,不用改變的話就無需修改,client.xml和server.xml兩個文件里,有多少臺服務器,就要寫多少臺服務器的地址上去。由于我是在本機上做實驗,所以就只有一臺機器的地址。
client.xml文件只需改紅色框內的內容就可以了:
server.xml文件改紅色框的內容,有多臺機器,就像紅框下面注釋的那樣改就可以了。
修改完,啟動tomcat(bin\startup.bat)
?
沒有任何問題,我們可以根據提示在\data\applogs\cat目錄中查看到日志。
?
?
在瀏覽器里面輸入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));
?
因此,我們可根據這個很容易地學習怎么使用。因為Cat項目已經啟動了,整個機器都在監控的范圍內,編寫的項目有指定受cat項目監控便可實現實時監控,分析我們代碼的執行效果了。
新建一個工程,在工程里面加入cat-home\target\cat-home-1.3.6-SNAPSHOT\WEB-INF\lib里面的所有jar包,暫時不知道哪些有用,哪些沒用,所以全部加入工程中是沒錯的了。
在工程里面編寫一個類,內容如下:
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(\data\appdatas\cat\client.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這個文件,內容就是很簡單的:
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的錯誤:
這需要我們點擊右上角的登陸,用賬號和密碼都是catadmin來登陸,在“配置”的最后一項“全局告警配置”的“客戶端路由”里面改為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>