部署點評Cat監控專案
在專案中監控程式碼執行的狀況,可以採用點評的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>