結合本週分享的《comsat 監控使用》,和以前聽過的《comsat外掛程式開發》,總結一下。
一.comsat 是什麼?
comsat 是基於flex 和 j2ee開發的監控系統,能夠承接系統監控和應用監控的需求,對於系統監控,主要監控記憶體使用,jvm狀態,cpu使用率等,系統監控侵入性較小,而對於應用監控,可以監控你自定義的一些key-value值,根據log打點來監控執行緒啟動狀況,通過覆蓋log4j的expetionapender來監控異常等,以及通過aop的方式,監控一些資料庫連線異常等。同樣,也可以很方便的開發自己的外掛程式。
二.特性。
目前實現:
1.新增新的應用,需要comsat服務端配置,客戶端web.xml配置***,並在本地classpath下配置comsat.xml(配置對應到comsat服務端的應用名稱、協議和開放的埠名稱)。
2.提供了基礎的key-value監控,runtime監控,客戶端需要加入plugin、collector等依賴等才能實現。
3.key-value監控需要依賴於日誌的開頭的紀錄進行獲取。
4.可以傳送手機報警和旺旺等報警,並進行報警規則的設定。
不足1.傳送的exception資訊較多,但是可以顯示的統計資訊不多。
2.客戶端啟動任務監聽,啟動task,對客戶端效能有影響。
三.目前我們主要應用場景
1.監控系統運**況
2.通過aop方式監控資料庫運**況,在資料庫斷開時,不進行重試。
四.結合日誌分析運**況
啟動客戶端時,日誌如下:
1.啟動本地配置,本地沒有comsat配置則啟動服務端配置,採用w3c解析xml如下:
url url = pluginconfigurer.class.getresource("/comsat.xml");
if (url == null)
logger.info("bootstrap " + url);
document doc = domhelper.build(url);
element root = doc.getdocumentelement();
// init global setting
string cfg = getsinglesubtextbyname(root, "global-config", "true");
globalconfig = boolean.parseboolean(cfg);
serverurl = getsinglesubtextbyname(root, "server-url", "tcp://localhost:5843");
這部分是採用了static的方法,是最先被初始化的
2. web.xml中配置的監聽的servlet 容器的comsatlistener 啟動
public void contextinitialized(servletcontextevent sce)
catch (exception e)
}
public class launcher
可以看到,先後啟動了心跳的task,心跳一般是60s傳送一次,和kv的task 一樣,隔一段時間傳送一次當前時間和應用給comsat;然後啟動message傳送task,這裡把訊息進行過濾併發往相應的ip埠?(為什麼配置是tcp?)-tcp 只是標識,是乙個標準的寫法,其實沒有用到和協議有關的東西,建立的是nio的socket連線
最後是啟動你自己擴充套件的plugin。
3. task啟動完成後,在messagesender這裡做了如下事情,啟動socket的連線,建立連線通道,並在失敗後重試。session的作用 - 保持了當前會話的狀態,即本次連線的狀態,由於沒有建立在物理資源消耗上,沒有做session的釋放。
public void connect() throws ioexception
4.在如上所述的建立的通道裡會啟動訊息傳送的方法,傳送的訊息採用了特有的標識。
五.專案應用,aop方式監控資料庫異常。
public class dataaccessaspect catch(dataacces***ception err)
} catch (exception e)
throw err;
}catch(exception err)}}
這樣可以實現在資料庫發生dataaceess異常時,保證能夠收到異常的報警。
六.外掛程式開發
其實上面的應用部分已經基本展示了外掛程式開發的過程,只是沒有在資料格式上擴充套件,資料格式擴充套件可以通過繼承monitor_item去做,並且可以擴充套件dao,將你要監控的資料紀錄到監控端。總結起來就是四步
1.擴充套件資料格式,繼承monitoritem
2.定義資訊收集器
3.定義傳送task,
4.可以初始化的監控端(如果你需要)繼承monitorpersistor
C 實現外掛程式式架構
1.定義外掛程式介面,將其編譯為dll namespace plugininte ce 2 編寫外掛程式,引用上面的dll,實現上面定義的介面,也編譯為dll 外掛程式a namespace plugininte ce 外掛程式b namespace pluginb 3,在程式中使用外掛程式,需要引...
mysql外掛程式式 MySQL外掛程式式儲存引擎(下)
在mysql 5.1中,mysql ab引入了新的外掛程式式儲存引擎體系結構,允許將儲存引擎載入到正在執行的mysql伺服器中。使用mysql外掛程式式儲存引擎體系結構,允許資料庫使用者為特定的應用需求選擇專門的儲存引擎,完全不需要管理任何特殊的應用編碼要求。採用mysql伺服器體系結構,由於在儲存...
外掛程式式開發
自己做個筆記 listplugins new list 存放外掛程式的列表 string path dll資料夾路徑 string files 所有的dll陣列 foreach string dllfile in files 遍歷每乙個dll assembly ably assembly.lodef...