項目地址:https://github.com/dianping/cat
編譯步驟:
這個項目比較另類,把編譯需要的jar包,單獨放在git分支mvn-repo里了,而且官方文檔里給了一個錯誤的命令提示:
git git@github.com:dianping/cat.git mvn-repo
當你直接把這條命令貼到terminal里執行時,會提示命令無效,正確的姿勢如下:
1、先安裝jdk 1.7或Jdk1.8【現在已經支持jdk1.8了】
這點很重要,cat項目的開發時間比較早,當時估計jdk8還沒有,在1.8下編譯雖然能成功,但是最后運行時會報錯。
注:對於已經安裝了jdk1.8的mac,可以參考Mac下同時安裝多個版本的JDK ,如果弄多版本jdk切換,不要在PATH變量里加$JAVA_HOME/bin,否則alias切換只切換了JAVA_HOME,但是PATH里的值不會變。
2、將分支mvn-repo下的jar包復制到本機maven倉庫
1、git clone https://github.com/dianping/cat.git 2、cd cat 3、git checkout mvn-repo 4、cp -R * ~/.m2/repository 5、git checkout master 6、mvn clean install -DskipTests
溫馨提示:
3.0 移除了cat的maven插件
需要先切換到2.0 分支, 執行mvn cat:install 后再切回來,即可完成依賴包install
然后再編譯就可以了,再次提醒:如果安裝了多個版本的jdk,編譯前先將jdk版本切換到jdk 1.7(包括編譯成功后,運行時也要jdk 1.7環境)
部署步驟:
mvn cat:install
安裝過程中,會提示輸入mysql的連接地址,輸入格式嚴格按 jdbc:mysql://127.0.0.1:3306 這種格式來,后面不要加一些額外參數,然后輸入用戶名、密碼(該用戶要有創建database的權限),之后會自動在mysql中創建cat數據庫,然后創建一堆表。
1、cd cat-home 2、mvn jetty:run //啟動cat服務
如果啟動過程無錯,
成功后,在瀏覽器打開http://localhost:2281/cat 就可以看到cat監控界面了
或者在cat目錄下輸入 mvn eclipse:clean eclipse:eclipse 然后將項目導入到eclipse中,運行cat-home項目里得‘com.dianping.cat.TestServer’來啟動CAT。
實時--》全部--》主機--》具體的Transaction
windows下的注意事項:
Windows 則是對系統運行盤下的/data/appdatas/cat和/data/applogs/cat有讀寫權限 //這個地方要特別說明一下,如有cat的源文件在E盤,則相關配置文件就應該放在e:/data/appdatas/cat/下面
1、Web.xml中新增filter
注:如果項目是對外不提供URL訪問,比如GroupService,僅僅提供Pigeon服務,則不需要。
Filter放在url-rewrite-filter 之后的第一個,如果不是會導致URL的個數無限多,比如search/1/2,search/2/3等等,無法監控,后端存儲壓力也變大。
xml:
<filter> <filter-name>cat-filter</filter-name> <filter-class>com.dianping.cat.servlet.CatFilter</filter-class> </filter> <filter-mapping> <filter-name>cat-filter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> </filter-mapping>
2.Pom.xml中更新jar包(點評內部公共組件,外部公司可以忽略)
<dependency> <groupId>com.dianping.cat</groupId> <artifactId>cat-core</artifactId> <version>1.2.7</version> </dependency>
cat-client的最新版本:
<dependency> <groupId>com.dianping.cat</groupId> <artifactId>cat-client</artifactId> <version>1.4.0</version> </dependency>
3、配置domain (cat-core 1.1.3之后版本,優先讀取A配置)
A) 在資源文件中新建app.properties文件
在resources資源文件META-INF下,注意是src/main/resources/META-INF/文件夾, 而不是webapps下的那個META-INF,添加app.properties,加上domain配置,如:app.name=tuangou-web
B) 在資源文件中新建client.xml文件
在resources資源文件META-INF下,新建cat文件夾,注意是src/main/resources/META-INF/cat/client.xml文件, 而不是webapps下的那個META-INF,domain id表示項目名稱此處為CMDB申請的名字,比如
<config mode="client"> <domain id="tuangou-web"/> </config>
4./data/appdatas/cat/目錄下,新建一個client.xml文件(線上環境是OP配置)
如果系統是windows環境,則在eclipse運行的盤,比如D盤,新建/data/appdatas/cat/目錄,新建client.xml文件
項目文件中srouce中的client.xml,此文件代表了這個項目我是誰,比如項目的名字Cat。
/data/appdatas/cat/client.xml,此文件有OP控制,這里的Domain名字用來做開關,如果一台機器上部署了多個應用,可以指定把一個應用的監控關閉。
<config mode="client"> <servers> <server ip="192.168.213.115" port="2280" /> </servers> </config>
alpha、beta這個配置需要自己在此目錄添加
預發以及生產環境這個配置需要通知到對應OP團隊,讓他們統一添加,自己上線時候做下檢查即可
a、192.168.213.115:2280端口是指向測試環境的cat地址
b、配置可以加入CAT的開關,用於關閉CAT消息發送,將enabled改為false,如下表示將mobile-api這個項目關閉
<config mode="client"> <servers> <server ip="192.168.213.115" port="2280" /> </servers> <domain id="mobile-api" enabled="false"/> </config>
5.CAT的Log4j集成 【建議所有Log都打到CAT,這樣才能更快發現問題】
業務程序的所有異常都通過記錄到CAT中,方便看到業務程序的問題,建議在Root節點中添加次appendar
a)在Log4j的xml中,加入Cat的Appender>
<appender name="catAppender" class="com.dianping.cat.log4j.CatAppender"></appender>
b)在Root的節點中加入catAppender
<root> <level value="error" /> <appender-ref ref="catAppender" /> </root>
c)注意有一些Log的是不繼承root的,需要如下配置
<logger name="com.dianping.api.location" additivity="false"> <level value="INFO"/> <appender-ref ref="locationAppender"/> <appender-ref ref="catAppender"/> </logger>
https://github.com/dianping/cat/tree/master/%E6%A1%86%E6%9E%B6%E5%9F%8B%E7%82%B9%E6%96%B9%E6%A1%88%E9%9B%86%E6%88%90
java config:
@Bean public FilterRegistrationBean catFilter() { FilterRegistrationBean registrationBean = new FilterRegistrationBean(); registrationBean.setFilter(new CatFilter()); registrationBean.addUrlPatterns("/*"); registrationBean.setName("cat-filter"); registrationBean.setDispatcherTypes(DispatcherType.FORWARD, DispatcherType.REQUEST); registrationBean.setOrder(1); return registrationBean; }
linux 安裝maven:
apache源配置 wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo yum -y install apache-maven yum -y install ant
cat監控平台
Problem報表可以查找一些異常操作,配置Transcation報表使用。如果發現Transaction報表中有些URL max時間太長,可以在Problem中查找到,然后進行分析
FAQ:
Error when try connecting to /10.10.10.2:2280
原因是沒有配置客戶端路由導致
這時點擊左上角的紅色配置按鈕,如出現登錄窗口輸入默認賬號密碼,catadmin/catadmin
進入配置界面后選擇 全局告警配置-客戶端路由
Backup-server為當前服務器地址,端口固定2280
Default-server定義可跳轉的路由地址,這里設置的是本機地址,enable設置true表示啟用。設置完成后點擊提交保存。
https://github.com/dianping/cat/blob/master/%E6%A1%86%E6%9E%B6%E5%9F%8B%E7%82%B9%E6%96%B9%E6%A1%88%E9%9B%86%E6%88%90/Cat%E6%8A%80%E6%9C%AF%E5%85%A5%E9%97%A8%E6%80%BB%E7%BB%93-0.1.0.doc
異常解決:
要按readme的要求,使用jdk1.8以下進行編譯生成war。否則,就有下面的錯:
[ERROR] [ServletHolder] Servlet initializing failed. org.unidal.lookup.LookupException: Component(org.unidal.web.lifecycle.RequestLifecycle) lookup failure. details: Unable to lookup component 'org.unidal.web.lifecycle.RequestLifecycle', it could not be started.
role: org.unidal.web.lifecycle.RequestLifecycle
roleHint: mvc
maven用的jdk環境和我編譯的環境不一樣,maven要依賴javahome
http://www.oschina.net/question/1463652_2152237
更改tomcat JDK:
經測試,更改catalina.bat設置也可以
@echo off set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_13 set JRE_HOME=C:\Program Files\Java\jre7
1、windows下:
修改 tomcat
/bin/setclasspath
.bat
在
rem Otherwise either JRE or JDK are fine
之前加上
set
JAVA_HOME = C:\.... jdk路徑
set
JRE_HOME = C:\....\jre Jre路徑
2、linux環境下
修改tomcat
/bin/setclasspath
.sh
在
# First clear out the user classpath
CLASSPATH=
下面添加上
export
JAVA_HOME=
/home/tool/jdk1
.6.0_18 --jdk路徑
export
JRE_HOME=
/home/tool/jdk1
.6.0_18
/jre
--jre路徑
保存,重新啟動tomcat
mvn編譯cat的代碼進報下面的錯:
A required class is missing:com/thoughtworks/xstream/io/HierarchicalStreamDriver
解決辦法:
在mvn本地倉庫中com\thoughtworks\xstream這個文件夾。重新執行mvn clean install -DskipTests即可
因為沒有這個文件夾,相關的jar都會重新下載,然后就下載到了。
http://www.myexception.cn/xml-soap/1898572.html
[INFO] Final Memory: 11M/307M
[INFO] ------------------------------------------------------------------------
[ERROR] No plugin found for prefix 'jetty' in the current project and in the plugin groups [org.apache.maven.plugins, org.codehaus.mojo] available from the repositories
[local (e:\m2repository), central (http://repo.maven.apache.org/maven2)] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e swit
ch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please rea
d the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/NoPluginFoundF
orPrefixException
原因:
settings.xml沒有配置插件應此需要
mvn org.mortbay.jetty:maven-jetty-plugin:run
這樣來運行。
如果需要使用jetty:run,那么必須在maven的setting.xml下配置
解決辦法:
在.m2的settings.xml文件的pluginGroups節點添加關於jetty的信息:
<!-- pluginGroups | This is a list of additional group identifiers that will be searched when resolving plugins by their prefix, i.e. | when invoking a command line like "mvn prefix:goal". Maven will automatically add the group identifiers | "org.apache.maven.plugins" and "org.codehaus.mojo" if these are not already contained in the list. |--> <pluginGroups> <!-- pluginGroup | Specifies a further group identifier to use for plugin lookup. <pluginGroup>com.your.plugins</pluginGroup> --> <pluginGroup>org.mortbay.jetty</pluginGroup> </pluginGroups>
http://www.xuebuyuan.com/1115208.html
