圖三:企業(yè)級監(jiān)控系統(tǒng)框架參考
APM應(yīng)用性能監(jiān)控系統(tǒng)介紹
“工欲善其事必先利其器”,做到代碼級別的監(jiān)控故障分析,提供7*24小時(shí)不間斷的業(yè)務(wù)檢測,就離不開專業(yè)有力的應(yīng)用性能監(jiān)控工具或平臺,精準(zhǔn)的應(yīng)用性能監(jiān)控分析也是業(yè)務(wù)上線后穩(wěn)定健壯運(yùn)行的重要保障。
應(yīng)用監(jiān)控
應(yīng)用監(jiān)控很重要,它能幫助我們回答“是什么”的問題。通常情況下,要確定“是什么問題?”我們需要特別編寫一些監(jiān)控代碼或者需要有能夠監(jiān)控代碼的工具,如果想要把它做好,我們可能需要把代碼集成在產(chǎn)品或業(yè)務(wù)系統(tǒng)里。盡管有一些代理會告訴我們到底問題是什么,比如由于一個(gè)或多個(gè)磁盤損壞而導(dǎo)致的I/O子系統(tǒng)緩慢,但很少有現(xiàn)成的代理可以幫助我們準(zhǔn)確地診斷出應(yīng)用的哪一部分出現(xiàn)了問題;又比如一個(gè)在成熟運(yùn)行的業(yè)務(wù)所依賴的子系統(tǒng),經(jīng)過近期的幾次業(yè)務(wù)代碼變更后,如公共子系統(tǒng)的Redis的效率變得越來越差,所有依賴這些公共子系統(tǒng)都會連帶收到系統(tǒng)卡頓或者響應(yīng)超時(shí)的報(bào)錯(cuò)。雖然那些完全自我愈合應(yīng)用有點(diǎn)像白日夢,從開發(fā)時(shí)間的角度看,也不太經(jīng)濟(jì)劃算,但是應(yīng)用可以對最常見類型的故障進(jìn)行自我診斷的理念,是一個(gè)令人欽佩而且可實(shí)現(xiàn)的愿望。
以Java應(yīng)用系統(tǒng)為例,JVM自身提供了相應(yīng)的性能監(jiān)控手段和工具,但這些分析工具主要是側(cè)重Java單方面的性能分析,需要通過我們的監(jiān)控架構(gòu)設(shè)計(jì)思路和框架,重新設(shè)計(jì)一套符合企業(yè)業(yè)務(wù)需求的應(yīng)用性能監(jiān)控系統(tǒng),加入能夠精準(zhǔn)做到定位出代碼級別的監(jiān)控又或者實(shí)時(shí)抓取出異常的業(yè)務(wù)SQL及事務(wù),配合可視化分析和預(yù)警,應(yīng)用性能監(jiān)控系統(tǒng)就可以直接、快速、有效的找到癥結(jié)所在,并直觀的把關(guān)鍵信息反饋給相關(guān)開發(fā)、運(yùn)維人員。
比如現(xiàn)在有一套業(yè)務(wù)涵蓋A,B,C之間的子系統(tǒng)(Subsystem)之間的調(diào)用關(guān)系,可能是Dubbo服務(wù)調(diào)用的、或是HTTP、Hessian、API等接口、又或是Rabbit MQ消息隊(duì)列、異步線程調(diào)取等方式??傊?,業(yè)務(wù)系統(tǒng)中的各子系統(tǒng)之間關(guān)系均采用到的主流技術(shù)來實(shí)現(xiàn)構(gòu)建,那么如何完成發(fā)現(xiàn)A子系統(tǒng)的應(yīng)用代碼問題是通過B并對C造成問題的根源呢?
APM(Application Performance Management)的性能監(jiān)測分析可以做到這一點(diǎn),以云智慧透視寶為例,APM不僅能夠在復(fù)雜系統(tǒng)中追蹤服務(wù)及代碼層級性能瓶頸,還能自動發(fā)現(xiàn)全局應(yīng)用拓?fù)洌龅蕉藢Χ说膽?yīng)用分析概覽,失誤監(jiān)控與分析,SQL腳本性能分析、代碼堆棧抓取以及事務(wù)深度追蹤等,幫助開發(fā)等部門提升工作效率。
透視寶APM監(jiān)控架構(gòu)思路
APM數(shù)據(jù)采集架構(gòu)設(shè)計(jì)

應(yīng)用監(jiān)控結(jié)構(gòu)思路:
透視寶的數(shù)據(jù)采集使用Sendproxy為SmartAgent的調(diào)度器,所有SmartAgent的數(shù)據(jù)都經(jīng)過Sendproxy進(jìn)行統(tǒng)一調(diào)度發(fā)送,推送到統(tǒng)一的大數(shù)據(jù)日志分析平臺。
其主要優(yōu)勢在于:
發(fā)送隊(duì)列保證各插件數(shù)據(jù)發(fā)送的穩(wěn)定性;
可以作為代理,部署在可聯(lián)外網(wǎng)的主機(jī)中,保證局域網(wǎng)非聯(lián)網(wǎng)環(huán)境的數(shù)據(jù)發(fā)送;
APM部署調(diào)試
1、客戶端簡易安裝
登錄透視寶網(wǎng)站后臺控制面板,在配置頁面下載對應(yīng)操作系統(tǒng)的Smart Agent,進(jìn)行Smart Agent的安裝和啟動。
[[email protected] smart_agent]# ./SmartAgent.sh start
Starting SmartAgent daemon: SmartAgent
Restarting SmartAgent SendProxy daemon: bin/SendProxy
No Server (/apps/smart_agent/plugins/SendProxy/bin/SendProxy) running
Starting SmartAgent SendProxy daemon: bin/SendProxy
OK
OK
備注:
SendProxy: 通過SendProxy發(fā)送的數(shù)據(jù)。
2、注冊JavaAagent的應(yīng)用監(jiān)控服務(wù)
要監(jiān)控Java應(yīng)用,您需要在“插件管理”頁面中安裝并開啟Java插件。

3、提供JavaAagent的部署
點(diǎn)擊“安裝”按鈕安裝JavaAgent 插件,安裝時(shí)自動將JavaAgent下載到SmartAgent安裝目錄的smart_agent/plugins下,下載完成后開啟插件。安裝Java插件后,您還可以在Java插件conf目錄中的app.conf文件中配置與數(shù)據(jù)采集相關(guān)的參數(shù)。
#/apps/smart_agent/plugins/Java_1459929876X1002x0
if [ "$1" = "start" -o "$1" = "run" ]; then
export JAVA_OPTS="$JAVA_OPTS -Xbootclasspath/p:/apps/smart_agent/plugins/Java_1459929876X1002x0/conf -javaagent:/apps/smart_agent/plugins/Java_1459929876X1002x0/lib/CAgent-1.0.0.jar=/apps/smart_agent/plugins/Java_1459929876X1002x0"