摘要:該文對(duì)開源的天兔(Lepus)數(shù)據(jù)庫(kù)監(jiān)控系統(tǒng)進(jìn)行深入分析,理清了系統(tǒng)功能各模塊的MVC架構(gòu)設(shè)計(jì)。在此基礎(chǔ)上,修改了針對(duì)主機(jī)操作系統(tǒng)、mongodb數(shù)據(jù)庫(kù)監(jiān)控的代碼,按照現(xiàn)有架構(gòu)設(shè)計(jì)思路,在企業(yè)需求基礎(chǔ)上全新開發(fā)存儲(chǔ)區(qū)域網(wǎng)絡(luò)SAN交換設(shè)備的監(jiān)控與告警功能,同時(shí),利用開源hMailServer構(gòu)建與本系統(tǒng)配套的郵件發(fā)送服務(wù),完善了企業(yè)內(nèi)網(wǎng)環(huán)境告警郵件發(fā)送機(jī)制。
關(guān)鍵詞:數(shù)據(jù)庫(kù)監(jiān)控 ?CodeIgniter ?Lepus ?SNMP ?SAN ?hMail
中圖分類號(hào):TP311.5 ? ? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A ? ? ? ?文章編號(hào):1672-3791(2021)09(c)-0000-00
Development Practice of Enterprise Database Monitoring System
LIU Junjun
(CHN Energy Zhunneng Group Co., Ltd., Information Center,Ordos,Inner Mongolia Autonomous Region,010300 China)
Abstract: This paper deeply analyzes the open source Lepus database monitoring system, and clarifies the MVC architecture design of the system function. On this basis, the code for monitoring the host OS and mongodb database is modified. According to the existing architecture design ideas, the monitoring and alarm functions of SAN switch equipment in storage area network are newly developed on the basis of enterprise requirements. At the same time, with the open source hmailserver used to build the mail sending system, we improved the alarm sending mechanism of enterprise intranet environment.
Key Words: Database monitoring; CodeIgniter; Lepus; SNMP; SAN; HMail
企業(yè)信息化建設(shè)發(fā)展經(jīng)歷了從傳統(tǒng)的每個(gè)信息系統(tǒng)一套獨(dú)立底層基礎(chǔ)硬件到如今統(tǒng)一底層平臺(tái),共享統(tǒng)一虛擬平臺(tái)或云平臺(tái)的架構(gòu)。同時(shí)企業(yè)數(shù)據(jù)分布也在不斷變化,從最初各個(gè)信息系統(tǒng)各自獨(dú)立式建設(shè),每個(gè)系統(tǒng)一個(gè)后臺(tái)數(shù)據(jù)庫(kù),各系統(tǒng)的后臺(tái)數(shù)據(jù)呈現(xiàn)孤島式分布,到企業(yè)對(duì)各系統(tǒng)數(shù)據(jù)統(tǒng)一倉(cāng)庫(kù)式存放,并對(duì)來(lái)自不同信息系統(tǒng)數(shù)據(jù)綜合分析利用,再到統(tǒng)一數(shù)據(jù)平臺(tái)建設(shè)。數(shù)據(jù)庫(kù)的監(jiān)控維護(hù)工作伴隨著企業(yè)信息化發(fā)展各個(gè)階段。企業(yè)在未建成統(tǒng)一數(shù)據(jù)平臺(tái)階段,需要一套數(shù)據(jù)庫(kù)監(jiān)控系統(tǒng)來(lái)幫助運(yùn)維人員掌握企業(yè)核心數(shù)據(jù)庫(kù)及底層主機(jī)、存儲(chǔ)、SAN網(wǎng)絡(luò)的運(yùn)行狀態(tài),以便在故障發(fā)生時(shí),可快速定位故障以恢復(fù)業(yè)務(wù)。
1 Lepus的架構(gòu)
天兔Lepus是開源的企業(yè)數(shù)據(jù)庫(kù)監(jiān)控系統(tǒng),其主要功能、軟件結(jié)構(gòu)、數(shù)據(jù)采集方式、可擴(kuò)展性這個(gè)幾個(gè)方面的內(nèi)容已在筆者另一論文[1]闡述。此文將詳細(xì)闡述Lepus的設(shè)計(jì)架構(gòu),并做新的功能開發(fā)。從整體看,Lepus數(shù)據(jù)庫(kù)監(jiān)控系統(tǒng)的軟件設(shè)計(jì)分兩部分:前端web展示、后端監(jiān)控?cái)?shù)據(jù)采集與告警管理(簡(jiǎn)稱作業(yè)調(diào)度)。
1.1 ?Web前端展示
1.1.1 目錄結(jié)構(gòu)
Lepus的Web前端使用PHP框架CodeIgniter[2]設(shè)計(jì)開發(fā)。CodeIgniter簡(jiǎn)稱CI,是一種基于MVC[3]模型的應(yīng)用框架,具有開源免費(fèi)、輕量級(jí)、速度非常快、基于段的URL的特性。分段式URL對(duì)于人類是友好的,如example.com/index.php/classA/functionA/ID表示調(diào)用控制器類classA的functionA函數(shù)并傳入?yún)?shù)ID(ID字段可選)。同時(shí)CI提供自定義路由控制功能,用戶可在application/config/routes.php文件中配置路由規(guī)則自定義特定URI的處理類和函數(shù)。CI框架提供豐富的參考類庫(kù),類庫(kù)位于system/libraries目錄,如常用的form_validation表單驗(yàn)證類。基于CI框架的web編碼中,控制器類函數(shù)通過(guò)使用模型類的方法從后端數(shù)據(jù)庫(kù)查得數(shù)據(jù),后將數(shù)據(jù)傳遞給控制器對(duì)應(yīng)視圖將數(shù)據(jù)按照視圖定義顯示出來(lái),完成用戶點(diǎn)擊事件驅(qū)動(dòng)下的MVC流程(見圖1)。
Lepus的web應(yīng)用程序主要目錄分布為:模型類在application\models目錄下,視圖頁(yè)面在application\views目錄下,控制器類在application\controllers目錄下,php文件名同類名(控制器類、模型類)一致,視圖php文件與加載該視圖的類名稱一致。
1.1.2 Web登錄與儀表盤
登錄邏輯由控制器login類定義,當(dāng)打開登錄URL時(shí)控制器類login加載視圖目錄下的login.php呈現(xiàn)登錄頁(yè)面,點(diǎn)擊頁(yè)面登錄按鈕提交用戶登錄信息時(shí)控制器login類中index函數(shù)對(duì)用戶登錄信息核驗(yàn),先驗(yàn)證用戶輸入信息有效性,利用CI框架工具類form_validation相關(guān)函數(shù)對(duì)用戶和密碼兩個(gè)域驗(yàn)證,驗(yàn)證通過(guò)后調(diào)用模型user_model類的check_user函數(shù)獲得后臺(tái)MySQL庫(kù)中合法用戶的信息來(lái)驗(yàn)證登錄信息,為進(jìn)一步提高安全性,用戶密碼在后臺(tái)MySQL庫(kù)lepus中的admin_user表中使用了md5密文方式存儲(chǔ),驗(yàn)證成功跳轉(zhuǎn)至base_url,即控制器index類的index函數(shù)所加載的視圖頁(yè)??刂破鱥ndex類的index函數(shù)加載模型lepus_model類,將后臺(tái)lepus數(shù)據(jù)庫(kù)db_status表中監(jiān)控對(duì)象狀態(tài)信息顯示至視圖頁(yè)application\views\index\index.php。登錄中用戶輸入信息的核驗(yàn)和用戶密碼的md5密文存儲(chǔ)可有效防御SQL注入攻擊[4]和用戶密碼的泄露威脅,提升系統(tǒng)安全性。
登錄后呈現(xiàn)給用戶五部分功能:儀表盤、配置中心、監(jiān)控內(nèi)容、告警面板、用戶權(quán)限。因用戶在頁(yè)面點(diǎn)擊各功能模塊時(shí)將驅(qū)動(dòng)對(duì)應(yīng)模塊控制器類加載相應(yīng)視圖頁(yè),因此需理清各功能模塊MVC類及加載視圖頁(yè)面定義。下面簡(jiǎn)要介紹各功能MVC類定義及視圖頁(yè)面定義情況。儀表盤功能在用戶登錄成功后或已登錄用戶點(diǎn)擊儀表盤菜單時(shí)被加載,其MVC類及視圖頁(yè)的定義與用戶驗(yàn)證成功后的頁(yè)面跳轉(zhuǎn)相同。
1.1.3 配置中心
配置中心含兩類功能,一是全局配置,另一是各類監(jiān)控對(duì)象的配置。監(jiān)控對(duì)象分類指mysql、Oracle、mongodb、sqlserver、redis、OS這些類型對(duì)象。全局配置功能包括各類監(jiān)控對(duì)象監(jiān)控開關(guān)、監(jiān)控頻率、告警配置、郵件/短信告警配置。全局配置實(shí)現(xiàn)由settings控制器類加載視圖settings\index.php頁(yè)面,其間加載模型option_model類,所有全局配置信息保存至lepus數(shù)據(jù)庫(kù)的options表。監(jiān)控對(duì)象配置功能實(shí)現(xiàn)各類監(jiān)控對(duì)象添加、編輯、刪除至回收站以及回收站中對(duì)象管理各功能。以O(shè)racle監(jiān)控對(duì)象為例,管理Oracle監(jiān)控對(duì)象的功能實(shí)現(xiàn)通過(guò)控制器類servers_oracle加載views\servers_oracle目錄下頁(yè)面實(shí)現(xiàn),如添加Oracle類監(jiān)控對(duì)象則加載add.php頁(yè)面,編輯監(jiān)控對(duì)象加載edit.php頁(yè)面,依此類推,控制器類中加載模型類servers_oracle_model將所有Oracle類監(jiān)控對(duì)象配置信息保存至lepus數(shù)據(jù)庫(kù)db_servers_oracle表,期間加載位于system/libraries的工具庫(kù)form_validation類驗(yàn)證用戶提交信息的有效性。其他類監(jiān)控對(duì)象配置功能實(shí)現(xiàn)與此類似:用XXX代表監(jiān)控對(duì)象,對(duì)應(yīng)的控制器類為servers_XXX,視圖頁(yè)面在views\servers_XXX目錄下,加載的模型類為servers_XXX_model,最終配置信息存儲(chǔ)在表db_servers_XXX中。各類監(jiān)控對(duì)象不同僅在監(jiān)控模型存在差異。
1.1.4 監(jiān)控對(duì)象狀態(tài)展示
如對(duì)于MySQL有健康監(jiān)控、資源監(jiān)控、鍵緩存監(jiān)控、InnoDB監(jiān)控、復(fù)制監(jiān)控、表空間分析、慢查詢分析、AWR報(bào)告共7項(xiàng)內(nèi)容,對(duì)于Oracle監(jiān)控僅有健康監(jiān)控、表空間監(jiān)控這2項(xiàng)內(nèi)容,監(jiān)控模型差異就體現(xiàn)在這里。以O(shè)racle監(jiān)控展示為例,健康監(jiān)控功能由模型類lp_oracle的index函數(shù)加載views\oracle\index.php實(shí)現(xiàn),此頁(yè)面每個(gè)監(jiān)控目標(biāo)添加了一個(gè)超鏈接,鏈接頁(yè)面繪制了健康信息圖,即加入時(shí)間維度信息以展示過(guò)去一段時(shí)間監(jiān)控目標(biāo)的狀態(tài)曲線,健康信息圖由模型類lp_oracle的chart函數(shù)加載views\oracle\chart.php頁(yè)面實(shí)現(xiàn),表空間監(jiān)控功能是由模型類lp_oracle的tablespace函數(shù)加載views\oracle\tablespace.php頁(yè)實(shí)現(xiàn),lp_oracle類加載oracle_model類、os_model類、option_model類、servers_oracle_model類來(lái)從lepus數(shù)據(jù)庫(kù)的options表、db_servers_oracle表中查詢得到用戶之前對(duì)于監(jiān)控目標(biāo)的配置選項(xiàng),并以此為依據(jù)將oracle_status表、oracle_status_history表、oracle_tablespace表、oracle_tablespace_history表中的信息展示在所加載的視圖頁(yè)。其他監(jiān)控對(duì)象狀態(tài)展示與此類似:XXX對(duì)象的YYY功能(除健康監(jiān)控功能)由模型類lp_XXX的YYY函數(shù)加載views\XXX\YYY.php實(shí)現(xiàn),XXX對(duì)象健康監(jiān)控功能由index函數(shù)加載index.php頁(yè)面實(shí)現(xiàn)。
1.1.5 歷史告警展示功能
歷史告警展示即為告警面板模塊告警事件列表功能。告警事件列表是由控制器類alarm的index函數(shù)加載views\alarm\index.php頁(yè)面實(shí)現(xiàn),由于告警信息較多時(shí)需要分頁(yè)顯示,因此加載CI工具庫(kù)pagination類來(lái)對(duì)告警信息按照每頁(yè)顯示30條的設(shè)置分多頁(yè)顯示,需展示的歷史告警存于lepus數(shù)據(jù)庫(kù)的alarm_history表,需加載模型類alarm_model取出需展示的告警數(shù)據(jù)展示于各分頁(yè)中。
1.1.6 用戶權(quán)限維護(hù)
Lepus默認(rèn)定義了4種角色:Administrator、IT-DBA、IT-Developer、guest_group?;诮巧啥x不同角色用戶,系統(tǒng)默認(rèn)有admin、guest兩用戶,分屬Administrator、guest_group角色。權(quán)限分配針對(duì)角色,通過(guò)規(guī)定是否可訪問(wèn)菜單項(xiàng)實(shí)現(xiàn)權(quán)限分配,Administrator角色擁有全部權(quán)限的定義及分配權(quán)。用戶權(quán)限模塊有用戶管理、角色管理、授權(quán)管理、菜單管理、權(quán)限節(jié)點(diǎn)共5項(xiàng)功能,對(duì)應(yīng)控制器類分別為user、role、auth、menu、privilege,加載模型類為user_model、role_model、auth_model、menu_model、privilege_model,數(shù)據(jù)庫(kù)訪問(wèn)涉及admin_user表、admin_role表、admin_role_privilege表、admin_menu表、admin_privilege表。admin用戶可通過(guò)訪問(wèn)授權(quán)管理、菜單管理、權(quán)限節(jié)點(diǎn)三菜單來(lái)開發(fā)新的菜單。
1.1.7 語(yǔ)言支持
Lepus支持簡(jiǎn)體中文、英文兩種語(yǔ)言。CI框架支持用戶自定義多種語(yǔ)言支持,用戶定義的語(yǔ)言文件存放在application\language目錄下,zh-hans目錄存放簡(jiǎn)體中文語(yǔ)言文件,english目錄存放英文語(yǔ)言文件。語(yǔ)言文件中關(guān)聯(lián)數(shù)組$lang存放頁(yè)面字符串元素的特定語(yǔ)言字符串。在定義新菜單時(shí),需同時(shí)在不同種語(yǔ)言文件中分別增加新菜單的語(yǔ)言定義字符串才能在頁(yè)面上正常顯示出菜單內(nèi)容。
1.2 后端作業(yè)調(diào)度
1.2.1 后端作業(yè)主程序
Lepus后端任務(wù)有數(shù)據(jù)采集作業(yè)、告警作業(yè)兩類。在后端作業(yè)執(zhí)行環(huán)境安裝后,數(shù)據(jù)采集、告警作業(yè)各功能模塊位于程序目錄/usr/local/lepus下。后端各類作業(yè)程序啟動(dòng)通過(guò)執(zhí)行shell腳本/usr/local/lepus/lepus實(shí)現(xiàn),腳本根據(jù)程序當(dāng)前運(yùn)行情況啟動(dòng)主程序lepus.py。主程序使用多進(jìn)程設(shè)計(jì),每種數(shù)據(jù)采集、告警作業(yè)任務(wù)創(chuàng)建一獨(dú)立進(jìn)程。數(shù)據(jù)采集、告警進(jìn)程在一個(gè)無(wú)限循環(huán)中反復(fù)執(zhí)行,執(zhí)行完一次數(shù)據(jù)采集任務(wù),則根據(jù)配置選項(xiàng)中采集頻率要求休眠一段時(shí)間。如前所述,前端Web展示部分已做好Lepus選項(xiàng)配置,配置信息存儲(chǔ)于lepus數(shù)據(jù)庫(kù)的options表,此處,后端數(shù)據(jù)采集程序?qū)⒏鶕?jù)options表已有信息來(lái)執(zhí)行各數(shù)據(jù)采集、告警產(chǎn)生與發(fā)送等作業(yè)。
1.2.2 數(shù)據(jù)采集作業(yè)
主程序lepus.py啟動(dòng)一項(xiàng)數(shù)據(jù)采集作業(yè)是通過(guò)執(zhí)行程序目錄下對(duì)應(yīng)作業(yè)的python程序?qū)崿F(xiàn)。啟動(dòng)XXX類監(jiān)控目標(biāo)的數(shù)據(jù)采集作業(yè)則發(fā)出python check_XXX.py指令,例如Oracle類目標(biāo)數(shù)據(jù)采集作業(yè)啟動(dòng)時(shí)會(huì)發(fā)出python check_oracle.py指令。以O(shè)racle類目標(biāo)數(shù)據(jù)采集作業(yè)為例,作業(yè)主進(jìn)程P0先將當(dāng)前各個(gè)監(jiān)控目標(biāo)的狀態(tài)數(shù)據(jù)從當(dāng)前狀態(tài)表oracle_status、oracle_tablespace轉(zhuǎn)存到歷史狀態(tài)表oracle_status_history、oracle_tablespace_history,同時(shí)刪除兩當(dāng)前狀態(tài)表中數(shù)據(jù),后從db_servers_oracle表獲得監(jiān)控目標(biāo)信息,依次為該類型各監(jiān)控目標(biāo)創(chuàng)建一獨(dú)立子進(jìn)程來(lái)執(zhí)行狀態(tài)數(shù)據(jù)采集作業(yè),假設(shè)有n個(gè)監(jiān)控目標(biāo),則依次創(chuàng)建P1、P2、...、Pi、...、Pn子進(jìn)程,使用列表plist=[P1、P2、...、Pi、...、Pn]管理各子進(jìn)程。在Pi子進(jìn)程中:針對(duì)目標(biāo)i,先嘗試連接目標(biāo)數(shù)據(jù)庫(kù),若連接失敗,則在oracle_status表中插入一條監(jiān)控目標(biāo)連接狀態(tài)為0的數(shù)據(jù),若連接成功,則獲取監(jiān)控目標(biāo)信息插入db_status表(已有目標(biāo)信息時(shí)跳過(guò)此步驟),后通過(guò)與監(jiān)控目標(biāo)數(shù)據(jù)庫(kù)連接獲得database_status、uptime、version、session_total等信息,在oracle_status表中插入一條附帶上述信息且連接狀態(tài)為1的數(shù)據(jù),接下來(lái)獲得監(jiān)控目標(biāo)數(shù)據(jù)庫(kù)表空間信息,如表空間名字、最大可用空間、使用率等信息存入lepus庫(kù)oracle_tablespace表,最后關(guān)閉數(shù)據(jù)庫(kù)連接。作業(yè)主進(jìn)程P0等待所有子進(jìn)程執(zhí)行完畢后,按照option表中frequency_monitor的值休眠若干秒后進(jìn)入下輪循環(huán)。
1.2.3 告警作業(yè)
告警作業(yè)根據(jù)監(jiān)控目標(biāo)當(dāng)前狀態(tài)完成告警信息的生成、存儲(chǔ)、發(fā)送,與數(shù)據(jù)采集作業(yè)類似,由后端作業(yè)主程序通過(guò)python alarm.py指令啟動(dòng)。在監(jiān)控程序后臺(tái)lepus數(shù)據(jù)庫(kù)內(nèi),與告警相關(guān)的表有3個(gè),分別是alarm_temp、alarm與alarm_history,設(shè)計(jì)3張表是為了實(shí)現(xiàn)配置告警發(fā)送休眠時(shí)間的功能,即可配置當(dāng)異常發(fā)生時(shí),告警在發(fā)送了所配置的特定次數(shù)后將休眠特定時(shí)間,而非反復(fù)發(fā)送同類型告警,待休眠時(shí)間過(guò)去再發(fā)送、再休眠,如此往復(fù)。alarm_temp表存放當(dāng)前告警休眠周期內(nèi)的告警信息摘要,alarm表存放新產(chǎn)生的還沒(méi)有發(fā)送通知郵件或短信的告警信息,alarm_history表存放歷史告警信息。以O(shè)racle類監(jiān)控目標(biāo)為例,在Oracle類目標(biāo)的一個(gè)告警作業(yè)循環(huán)周期內(nèi),首先檢查alarm_temp表中告警在當(dāng)前時(shí)間是否已陳舊并刪除陳舊告警信息,后根據(jù)oracle_status表中監(jiān)控目標(biāo)狀態(tài)信息及db_servers_oracle表中告警配置信息判斷并生成告警,對(duì)每個(gè)監(jiān)控目標(biāo)逐一進(jìn)行判斷,若目標(biāo)的連接狀態(tài)異常,先檢查alarm_temp表中alarm_type字段不為none的數(shù)據(jù)條目數(shù)來(lái)決定是否將此次產(chǎn)生告警信息通過(guò)郵件或短信進(jìn)行發(fā)送,具體為通過(guò)在信息中將自動(dòng)send_mail設(shè)為1或0來(lái)實(shí)現(xiàn),并且將產(chǎn)生的告警信息加入alarm_temp與alarm表,接著更新db_status表中監(jiān)控目標(biāo)的連接狀態(tài)信息,若目標(biāo)的連接狀態(tài)正常,則先檢查alarm_temp表并刪除其中所有關(guān)于監(jiān)控目標(biāo)連接狀態(tài)異常的告警信息,若刪除了一條及以上告警,則說(shuō)明監(jiān)控目標(biāo)剛從連接異常的狀態(tài)中恢復(fù),于是將一條監(jiān)控目標(biāo)正常的告警信息加入alarm表,之后檢查數(shù)據(jù)庫(kù)的其他告警點(diǎn),如總會(huì)話數(shù)、活動(dòng)會(huì)話數(shù)、等待會(huì)話數(shù),當(dāng)這些狀態(tài)值超出所配置的critical、warning告警閾值,則生成一條告警信息加入alarm_temp與alarm表,執(zhí)行類似上述的告警發(fā)送與否的判斷過(guò)程并更新db_status表監(jiān)控目標(biāo)狀態(tài)信息,緊接著檢查監(jiān)控目標(biāo)表空間狀態(tài)并生成告警加入到alarm_temp與alarm表,完成上述準(zhǔn)備工作進(jìn)入到告警郵件或短信的發(fā)送過(guò)程。告警發(fā)送前要將告警信息逐條從alarm表取出,檢查全局告警發(fā)送開關(guān)與每條告警的send_mail標(biāo)記,按照配置信息表所配郵件/短信協(xié)議信息,編輯告警信息發(fā)送,最后將alarm表中告警全部轉(zhuǎn)移到alarm_history表,再將alarm表清空。
1.3功能修改與開發(fā)
1.3.1 OS監(jiān)控功能修改
OS監(jiān)控目標(biāo)無(wú)法連接時(shí),主機(jī)健康監(jiān)控頁(yè)面會(huì)出現(xiàn)多行同一監(jiān)控目標(biāo)狀態(tài)信息,通過(guò)對(duì)OS監(jiān)控后端作業(yè)代碼的分析,發(fā)現(xiàn)問(wèn)題出在向os_status表插入目標(biāo)新狀態(tài)前沒(méi)有將之前狀態(tài)數(shù)據(jù)先行刪除,針對(duì)問(wèn)題修改,在check_os.sh中增加相應(yīng)語(yǔ)句可排除問(wèn)題。
1.3.2 ?mongodb監(jiān)控功能修改
筆者企業(yè)mongodb所用版本為3.2.7,直接使用Lepus對(duì)生產(chǎn)環(huán)境mongodb目標(biāo)監(jiān)控出錯(cuò)。按照Lepus官方所述安裝pymongo2.7模塊會(huì)因認(rèn)證模式問(wèn)題無(wú)法連接mongodb,需根據(jù)服務(wù)器環(huán)境python版本選擇兼容版本的pymongo,筆者綜合考慮python、mongodb、pymongo三者版本的兼容性,選擇pymongo3.3,經(jīng)測(cè)試可成功實(shí)現(xiàn)mongodb類監(jiān)控目標(biāo)的認(rèn)證連接。通過(guò)對(duì)目標(biāo)數(shù)據(jù)庫(kù)運(yùn)行狀態(tài)數(shù)據(jù)分析,將代碼中利用repl['secondary']判斷mongodb實(shí)例主從地位的代碼改為使用repl['ismaster']判斷,同時(shí)將mappedWithJournal狀態(tài)數(shù)據(jù)查詢代碼去除。通過(guò)以上改動(dòng),成功利用Lepus對(duì)生產(chǎn)環(huán)境mongodb目標(biāo)的監(jiān)控。
1.3.3 SAN交換機(jī)監(jiān)控功能開發(fā)
企業(yè)現(xiàn)有SAN[5]設(shè)備為博科fabric產(chǎn)品,日常管理中維護(hù)人員比較關(guān)注設(shè)備在線情況、設(shè)備端口的光功率情況,因此需設(shè)計(jì)兩個(gè)功能頁(yè)面,一個(gè)頁(yè)面展示所有設(shè)備的在線/離線狀態(tài),另一頁(yè)面以表格形式展示在線設(shè)備的接口光功率信息。需要在前端Web、后端作業(yè)分別添加對(duì)應(yīng)功能模塊。前端Web部分,首先要在Web端用戶權(quán)限的菜單管理模塊添加配置SAN監(jiān)控目標(biāo)、查看SAN監(jiān)控目標(biāo)在線狀態(tài)、查看SAN監(jiān)控目標(biāo)接口光功率等功能的菜單、實(shí)現(xiàn)功能的URL(對(duì)應(yīng)MVC框架的控制器類、函數(shù)),在權(quán)限節(jié)點(diǎn)模塊定義權(quán)限,在授權(quán)管理模塊將定義權(quán)限分配給具體用戶,然后在application\language\zh-hans與english目錄中的語(yǔ)言文件中添加菜單對(duì)應(yīng)的語(yǔ)言字符串定義。配置SAN類型監(jiān)控目標(biāo)需新建servers_san控制器類、servers_san_model模型類、views\servers_san\index.php等頁(yè)面,在lepus數(shù)據(jù)庫(kù)創(chuàng)建db_servers_san表存放目標(biāo)配置信息。查看SAN監(jiān)控目標(biāo)在線狀態(tài)及接口光功需新建lp_san控制器類、san_model模型類、views\san\index.php與optical_power.php兩個(gè)頁(yè)面,在lepus數(shù)據(jù)庫(kù)中創(chuàng)建san_status、san_status_history、san_int_opti_power、san_int_opti_power_history四張表存放監(jiān)控目標(biāo)的當(dāng)前/歷史狀態(tài)、接口光功率的當(dāng)前/歷史值。后端作業(yè)部分需要實(shí)現(xiàn)SAN監(jiān)控目標(biāo)的檢查作業(yè)模塊check_san.py,將檢查中采集到的數(shù)據(jù)填入lepus數(shù)據(jù)庫(kù)的對(duì)應(yīng)狀態(tài)表,SAN檢查作業(yè)通過(guò)SNMP協(xié)議獲得設(shè)備狀態(tài)值,需要先在SAN交換機(jī)端配置只讀團(tuán)體字。再將檢查作業(yè)加入到后端作業(yè)主程序,最后在告警管理作業(yè)中加入SAN監(jiān)控目標(biāo)告警信息生成模塊,以便在目標(biāo)離線、光功率降至臨界值以下時(shí)向管理員發(fā)送告警郵件或短信。
1.3.4 內(nèi)網(wǎng)郵件告警的實(shí)現(xiàn)
為實(shí)現(xiàn)監(jiān)控告警的及時(shí)發(fā)送,需要在內(nèi)網(wǎng)環(huán)境配置SMTP服務(wù)。選擇內(nèi)網(wǎng)中有權(quán)訪問(wèn)互聯(lián)網(wǎng)的服務(wù)器,安裝hMailServer[6],建立test.com域,在域內(nèi)創(chuàng)建lepus@test.com賬戶,通過(guò)此賬戶,可方便地將Lepus告警及時(shí)送達(dá)管理員的外網(wǎng)郵箱,對(duì)于啟用垃圾郵件過(guò)濾功能的公網(wǎng)郵箱,可將發(fā)送郵件告警的賬戶加入到白名單中。
2 結(jié)語(yǔ)
Lepus數(shù)據(jù)庫(kù)監(jiān)控系統(tǒng)有望成為各類新監(jiān)控功能的孵化平臺(tái)。通過(guò)上述分析總結(jié)與開發(fā)完善工作,可幫助企業(yè)建立真正掌握在自己手中的獨(dú)立高效、易于維護(hù)的基礎(chǔ)設(shè)施監(jiān)控平臺(tái)。
參考文獻(xiàn)
[1]劉軍軍.基于Lepus企業(yè)數(shù)據(jù)庫(kù)監(jiān)控系統(tǒng)研究與應(yīng)用[J].電腦編程技巧與維護(hù),2021(8):95-96,134.
[2]童瑩萍.基于Codeigniter的面向?qū)ο蟪绦蛟O(shè)計(jì)網(wǎng)絡(luò)教學(xué)平臺(tái)設(shè)計(jì)與研究[J].工業(yè)控制計(jì)算機(jī),2017,30(12):35-36.
[3]陳帥.基于MVC的NOSS+報(bào)表管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].長(zhǎng)春:吉林大學(xué),2020.
[4]孔平凡.Web應(yīng)用常見安全漏洞分析與防范對(duì)策研究[D].武漢:華中科技大學(xué),2018.
[5]奚軍.基于SAN架構(gòu)的開放式網(wǎng)絡(luò)安全數(shù)據(jù)存儲(chǔ)系統(tǒng)設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2020,43(15):82-85.
[6]李玉峰.基于hMailServer與SpamAssassin的垃圾郵件過(guò)濾服務(wù)器的搭建[J].內(nèi)蒙古農(nóng)業(yè)大學(xué)學(xué)報(bào):自然科學(xué)版,2017,38(1):89-92.
作者簡(jiǎn)介:劉軍軍(1982—),男,碩士,工程師,主要從事企業(yè)信息基礎(chǔ)設(shè)施建設(shè)與維護(hù)方面的工作。
DOI:10.16661/j.cnki.1672-3791.2110-5042-2373