曬一下我的監(jiān)控系統(tǒng)
2011-11-13 22:35 熬夜的蟲子 閱讀(7021) 評論(18) 收藏 舉報(bào)背景
一般情況下,由于服務(wù)器環(huán)境或者程序漏洞的問題,現(xiàn)行的系統(tǒng)多多少少會(huì)發(fā)生一些異常或者bug,給用戶體驗(yàn)甚至利益造成影響。而現(xiàn)在的第三方監(jiān)控工具大多是關(guān)于服務(wù)器硬件數(shù)據(jù)監(jiān)控。對于業(yè)務(wù)方面、例如每日訂單的數(shù)據(jù)量、Mq中的要求退款的隊(duì)列長度...還是比較薄弱。這套系統(tǒng)的作用就是在第一時(shí)間捕獲工程師可以考慮到的系統(tǒng)風(fēng)險(xiǎn)異常。
結(jié)構(gòu)草圖

監(jiān)控系統(tǒng)的結(jié)構(gòu)整體分為4塊:1.監(jiān)控web應(yīng)用站點(diǎn)為后臺主控程序負(fù)責(zé)各個(gè)監(jiān)控邏輯的策略配置、監(jiān)控跟蹤、報(bào)表履歷以及用戶、權(quán)限等等傳統(tǒng)的信息流管理;2.監(jiān)控webservice提供監(jiān)控系統(tǒng)的采集以及策略配置的更新標(biāo)志;3.報(bào)警win服務(wù),根據(jù)各個(gè)策略規(guī)則對采樣進(jìn)行匹配分析,并進(jìn)行郵件或手機(jī)報(bào)警;4.客戶端監(jiān)控代理,負(fù)責(zé)客戶端的實(shí)際采集動(dòng)作。 系統(tǒng)的難點(diǎn)在于設(shè)計(jì)、性能、并行、瓶頸等方面,例如客戶端與服務(wù)器端時(shí)間不匹配的場合,報(bào)警的準(zhǔn)確性、報(bào)警的人性化配置、采樣程序的性能、監(jiān)控與代理的銜接等等。或許系統(tǒng)可以優(yōu)化的地方還有很多吧。
DEMO概要流程
step1.選擇監(jiān)控設(shè)置 目前系統(tǒng)支持?jǐn)?shù)據(jù)庫、MQ、內(nèi)存、Cpu、文件監(jiān)控

step2.添加監(jiān)控,根據(jù)類別 我們以數(shù)據(jù)庫為例

step3.添加sql配置策略 不同的監(jiān)控類型配置不同的策略規(guī)則 數(shù)據(jù)庫類型0為MSSQL, MSSQL支持sql語句和存儲過程,監(jiān)控類型1為sql語句

step 4.配置完監(jiān)控策略規(guī)則 設(shè)置報(bào)警策略 監(jiān)控標(biāo)準(zhǔn)值為參考基準(zhǔn) 例如設(shè)置大于5 當(dāng)我們sql語句采集的值大于5時(shí)觸發(fā)報(bào)警策略
報(bào)警方式目前支持郵件和手機(jī)短信。報(bào)警時(shí)間根據(jù)業(yè)務(wù)場景設(shè)置,這里模糊的意思是忽略、有時(shí)候波峰或者谷底的值比較離譜根據(jù)實(shí)際場景設(shè)計(jì)模糊次數(shù)

step5.添加聯(lián)系人

step6.在應(yīng)用端安裝監(jiān)控代理

step7.檢查服務(wù)

step8.服務(wù)端安裝監(jiān)控報(bào)警服務(wù)
step9.啟動(dòng)服務(wù)查看報(bào)表 以及報(bào)警相關(guān) 因?yàn)橄x子本機(jī)沒有手機(jī)服務(wù)引擎也沒郵件服務(wù) 所以就拿以前的截圖充數(shù)一下
step

概要設(shè)計(jì)以及問題點(diǎn)
1.報(bào)警服務(wù)需要考慮一下幾個(gè)問題。報(bào)警的執(zhí)行是設(shè)置在客戶端還是服務(wù)器端?如果是客戶端,那么客戶端服務(wù)器直接當(dāng)?shù)袅嗽趺崔k?如果是服務(wù)器端,如何能匹配及時(shí)的信息,監(jiān)控主程的采集接受客戶端的數(shù)據(jù),時(shí)間不匹配怎么辦?如果時(shí)間作為參數(shù)傳給web服務(wù),服務(wù)器端的監(jiān)控check如何保證即時(shí)?對于以上問題,demo中的處理方法不一定好,大家有空一起交流下。Demo的處理方法是報(bào)警執(zhí)行在服務(wù)器端,web服務(wù)器采集數(shù)據(jù)時(shí)忽略客戶端時(shí)間以服務(wù)器端時(shí)間為準(zhǔn)。即時(shí)監(jiān)控的問題比較頭痛。目前demo中在服務(wù)啟動(dòng)時(shí)加載所有監(jiān)控配置,并且根據(jù)加載的信息對每一條監(jiān)控分配一個(gè)異步線程。監(jiān)控的主要邏輯在存儲過程中完成。因?yàn)楸O(jiān)控采集的時(shí)間與監(jiān)控check的時(shí)間存在時(shí)間差,所以我將check范圍設(shè)置為1分鐘之內(nèi)的最新值。 只要能保證check端的更新頻率比采集端的快,就能保證到每一條數(shù)據(jù)都能被check
2.報(bào)警信息的人性化處理人為可控的設(shè)計(jì)報(bào)警的時(shí)間間隔與次數(shù)。目前demo的處理時(shí)有bug的,暫時(shí)先不調(diào)整了。Demo的處理時(shí)在每次發(fā)生監(jiān)控異常時(shí),在服務(wù)器端加載2個(gè)緩存項(xiàng),一個(gè)是發(fā)現(xiàn)異常的時(shí)間,一個(gè)是系統(tǒng)設(shè)定的發(fā)送總次數(shù)。每次進(jìn)入報(bào)警流程,判斷當(dāng)前時(shí)間與緩存時(shí)間的差,如果在設(shè)定的間隔時(shí)間內(nèi)忽略。第二層是發(fā)送總次數(shù),先判斷緩存值,如果為空,加載系統(tǒng)配置最大發(fā)送次數(shù),沒發(fā)送一次-1,如果超過總次數(shù)忽略。緩存時(shí)間24小時(shí)。bug點(diǎn): 每次進(jìn)入報(bào)警流程比較是發(fā)現(xiàn)異常,如果采集的數(shù)據(jù)第一條為異常,第二條為正常,那么就不進(jìn)入報(bào)警流程,就只發(fā)一次了。現(xiàn)在的想法:報(bào)警流程與監(jiān)控check流程分開獨(dú)立,報(bào)警的流程方式可以使用類似站內(nèi)信的方法,報(bào)警信息全部存入mq,異步處理。
3.監(jiān)控采集的性能方案demo中的處理方法是按監(jiān)控配置類別分線程,現(xiàn)在提供cpu和內(nèi)存監(jiān)控,那么就是2個(gè)線程在跑。demo的循環(huán)采集并未使用計(jì)時(shí)器,全部使用while(true)死循環(huán),有同學(xué)有好的方法可以提議下。而且cpu監(jiān)控和內(nèi)存的方式差異比較大,內(nèi)存的監(jiān)控每次循環(huán)都可以用新的實(shí)例,cpu監(jiān)控每一次新的實(shí)例初始值都是0,在不使用單例的情況下,cpu的監(jiān)控使用計(jì)時(shí)器肯定是不行的
4.監(jiān)控配置的方案
Demo中每個(gè)客戶端每個(gè)大類只能有1種監(jiān)控配置,例如只有1個(gè)cpu監(jiān)控,一個(gè)sql監(jiān)控等。Sql監(jiān)控中可以可以配置多個(gè)下級監(jiān)控配置,例如監(jiān)控a監(jiān)控Q1數(shù)據(jù)庫,監(jiān)控b監(jiān)控Q2數(shù)據(jù)庫。Cpu和內(nèi)存監(jiān)控沒有下級監(jiān)控配置。直接進(jìn)入報(bào)警策略配置。
也就是 客戶端(1)<---->(N)監(jiān)控配置(1)<---->(N cpu和內(nèi)存是1)監(jiān)控策略(N cpu和內(nèi)存是1)<---->(1)報(bào)警策略(1)<---->(1)聯(lián)系人信息
5.監(jiān)控與代理的銜接
Demo中,監(jiān)控主程將代理類MonitorC序列化,通過http方式由代理端請求獲得。還有就是同步問題,因?yàn)楸O(jiān)控主程的配置其實(shí)是很少改動(dòng)的,所以代理端長期都是保持一個(gè)相同的資源配置,但是如何使代理端在不影響性能的情況下同步最新的主程配置。目前demo中式定期更新緩存。
現(xiàn)在的想法是另開一個(gè)線程,然后用一個(gè)全局變量來控制是否讀取最新的主程資源
6.監(jiān)控采集
通過webservice處理代理端的請求,入庫。根據(jù)類型分表,View_Cpu、View_Mem、View_Sql、View_File等 表結(jié)構(gòu)都一樣。根據(jù)后臺配置另開服務(wù)定期清理數(shù)據(jù)庫數(shù)據(jù)
以上是demo開發(fā)過程中遇到的部分問題和臨時(shí)個(gè)人的解決方法。大家交流一下可以發(fā)現(xiàn)好的方案,一起學(xué)習(xí)。
![]() |
原創(chuàng)作品允許轉(zhuǎn)載,轉(zhuǎn)載時(shí)請務(wù)必以超鏈接形式標(biāo)明文章原始出處以及作者信息。 作者:熬夜的蟲子 點(diǎn)擊查看:博文索引 |

浙公網(wǎng)安備 33010602011771號