最近在看公司的監(jiān)控平臺實現(xiàn),大概做一個總結(jié)
從整個系統(tǒng)架構(gòu)上來講,分為Server和Client兩層:
Server端
- 圖形化顯示
- 權(quán)限
包含不同產(chǎn)品,應(yīng)用腻脏,集群鸦泳,監(jiān)控項配置等
- 報警等功能
包含某一項或多項監(jiān)控項到達閾值時的短信/郵件等消息
Client端
- 消息發(fā)送
對收集的監(jiān)控項發(fā)送到Server
- 信息采集
采集系統(tǒng)相關(guān)或業(yè)務(wù)相關(guān)信息
- 通用業(yè)務(wù)代理
包括對異常,日志永品,RPC調(diào)用做鹰,數(shù)據(jù)庫調(diào)用等通用的接口/實現(xiàn)進行代理,實現(xiàn)采集功能擴展
因為看的是Client代碼鼎姐,所以主要對這塊進行一個分析和總結(jié)钾麸。從技術(shù)上來說當(dāng)數(shù)據(jù)已經(jīng)采集到Server端后其實和普通的業(yè)務(wù)系統(tǒng)差別不大。
消息發(fā)送
- 目前使用BIO的長連接症见,當(dāng)然可以考慮使用MQ喂走,主要看是否有環(huán)境支持及開發(fā)效率
信息采集
當(dāng)前將采集的信息分為兩層,見下圖:
舉例:采集異常信息的時候可以分為ExceptionCollector谋作,內(nèi)部可以分不同的Exception類型或日志類型做為Aggregator芋肠。
通用業(yè)務(wù)代理
通過Javassist動態(tài)代理類對常用的工具/類進行擴展,比如代理的Log4j日志采集遵蚜,dubbo注冊實現(xiàn)代理等帖池。
這里的需要對被代理的工具/類源碼有非常深刻的了解。
當(dāng)系統(tǒng)啟動時會通過java.lang.instrument包實現(xiàn)用代理后的類代替掉JVM中原始類
java.lang.instrument.Instrumentation基本功能和用法:
http://blog.csdn.net/yczz/article/details/51656386
啟動應(yīng)用是添加的代理:
反編譯后結(jié)果:
執(zhí)行初始化:
總結(jié):
當(dāng)然這只是寬泛的總結(jié)吭净,真正在實現(xiàn)的時候還有很多坑要踩睡汹。