文/李云鵬
民航空管信息系統(tǒng)種類繁多,每套系統(tǒng)通常都自帶一套監(jiān)控系統(tǒng),各系統(tǒng)的界面、操作邏輯各不相同,亟待開發(fā)一套集中式一體化的監(jiān)控系統(tǒng)。
Zabbix是一種開源的企業(yè)級的分布式監(jiān)控解決方案,可以用來監(jiān)控各類網(wǎng)絡(luò)參數(shù)和服務(wù)器健康狀態(tài)。Zabbix使用靈活的通知機(jī)制,從而保證對系統(tǒng)故障的快速響應(yīng)。所有Zabbix的報告、統(tǒng)計和配置參數(shù),都可以通過web前端控制,從而保證了監(jiān)控系統(tǒng)的易用性和跨平臺型。
由于空管運(yùn)行生產(chǎn)環(huán)境大部分和互聯(lián)網(wǎng)物理隔絕,為了便于快速安裝部署,本文介紹基于ZabbixAppliance的安裝方法,對應(yīng)服務(wù)器系統(tǒng)虛擬平臺為VMWareESXI6.5。
首先在Zabbix官網(wǎng)下載ZabbixAppliance的vmdk格式文件,該文件可以直接用于VMWarePlayer、Server和Workstation等系列產(chǎn)品中,如要安裝在ESXI中,需要通過vCenter Converter進(jìn)行格式轉(zhuǎn)換。
在生產(chǎn)環(huán)境中,因為無法連接互聯(lián)網(wǎng),VMware vCenter Converter Standalone安裝完成后無法正常啟動服務(wù)。該問題是由于無法聯(lián)網(wǎng)對文件完整性進(jìn)行檢查造成的,需要通過修改注冊表解決該問題。在Windows注冊表編輯器里HKEY_LOCAL_MACHINESystemCurrentControlSetControl中新建ServicesPipeTimeout鍵值,類型為DWORD32,并將值設(shè)成300000,隨后重啟操作系統(tǒng)。
當(dāng)前版本的ZabbixAppliance操作系統(tǒng)為Ubuntu16.04,預(yù)裝好了ZabbixServer和MySQL數(shù)據(jù)庫,配置好網(wǎng)絡(luò)及時鐘參數(shù)后可以即裝即用。
在生產(chǎn)環(huán)境中通常使用靜態(tài)IP地址,登陸root用戶,打開/etc/network/interfaces文件,將iface eth0 inetdhcp修改為ifaceeth0inetstatic。并在其后添加IP地址(address),子網(wǎng)掩碼(netmask),網(wǎng)關(guān)(gateway)。文件編輯完成后,運(yùn)行sudoifupeth0。
Zabbix存在在部分界面中文字符為亂碼的Bug,需要將Windows下的中文字體上傳到服務(wù)器中。如將Windows中的C:WindowsFontssimsun.ttc拷貝到服務(wù)器中的/etc/alternatives/Zabbix-frontend-font,屆時亂碼將正確顯示為宋體。
在被監(jiān)控的目標(biāo)計算機(jī)上需要部署ZabbixAgent,以對本地的資源和應(yīng)用進(jìn)行主動式監(jiān)控。在Zabbix的官網(wǎng)上有Windows、macOS和OpenBSD的對應(yīng)下載版本,而Linux版的Zabbix通常被包含在各個Linux發(fā)行版的安裝源中。在生產(chǎn)環(huán)境,可以通過安裝操作系統(tǒng)的iso鏡像安裝,或者在互聯(lián)網(wǎng)上下載對應(yīng)的rpm包。Zabbix-agent還依賴于openssl和openssl-devel,所以離線安裝時要將對應(yīng)版本的三個rpm包一起下載安裝。
無論Linux還是Windows,ZabbixAgent安裝好后,需要修改zabbix_agentd.conf配置文件,通常需要修改的項為Server和ServerActive的IP地址。配置完成后重啟各自的服務(wù),Linux下命令為service Zabbix-agent restart,Windows下可以通過任務(wù)管理器下的服務(wù)窗口重新啟動ZabbixAgent。
Zabbix提供了WEB界面對各類監(jiān)控項進(jìn)行管理和配置。ZabbixAppliance初始化提供Admin用戶進(jìn)行管理,初始密碼為zabbix。
監(jiān)控配置首先要創(chuàng)建主機(jī)群組,通常一套系統(tǒng)可以認(rèn)為是一個主機(jī)群組。
其次是模板的管理。Zabbix內(nèi)置了83套模板,可以覆蓋大部分的通用項目監(jiān)控。比如模板TemplateModuleICMPPing可以對各類硬件進(jìn)行最簡單的在線與否檢查,并針對丟包、響應(yīng)慢及網(wǎng)絡(luò)掉線等問題進(jìn)行告警。模板Template OSWindows可以部署于Windows服務(wù)器及客戶端,其提供了內(nèi)存不足、CPU負(fù)載過高、進(jìn)程數(shù)量過多、網(wǎng)絡(luò)不可達(dá)等告警。模板TemplateOSLinux類似,提供了預(yù)置的監(jiān)控項和觸發(fā)器。
主機(jī)群組中包含若干主機(jī),創(chuàng)建主機(jī)時需要填寫主機(jī)名稱,選擇對應(yīng)的主機(jī)群組,并根據(jù)軟硬件環(huán)境選擇監(jiān)控接口,包括agent代理程序、SNMP、JMX和IPMI。同時,可以選擇若干個適合的模板,減少隨后監(jiān)控項配置的工作量。
每臺主機(jī)有監(jiān)控項和觸發(fā)器。監(jiān)控項對應(yīng)具體的監(jiān)控內(nèi)容,創(chuàng)建時需要填寫名稱、鍵值、主機(jī)接口、更新間隔、歷史數(shù)據(jù)保留時長、趨勢存儲時間。鍵值根據(jù)監(jiān)控類型不同,有許多常用的預(yù)設(shè)鍵值。同時,用戶可以在Agent機(jī)上編寫腳本,通過UserParameter的方式調(diào)用執(zhí)行。針對每個監(jiān)控項,可以先在ZabbixServer上,運(yùn)行zabbix_get命令查詢對應(yīng)的鍵值是否存在或符合預(yù)期。命令格式為zabbix_get-s[目標(biāo)IP地址]-k[鍵值]。
觸發(fā)器可以針對各個監(jiān)控項設(shè)置告警閾值,創(chuàng)建時需要設(shè)置名稱、嚴(yán)重性、表達(dá)式等內(nèi)容。嚴(yán)重性包括信息、警告、一般嚴(yán)重、嚴(yán)重、災(zāi)難,可以對告警進(jìn)行分類管理,并按嚴(yán)重程度發(fā)出不同的警示聲音和信息。表達(dá)式針對監(jiān)控項的返回值設(shè)置不同的函數(shù)計算。通常情況下,事件的恢復(fù)表達(dá)式就是上述表達(dá)式的逆運(yùn)算,如果監(jiān)控項內(nèi)容特殊,用戶可以自定義恢復(fù)表達(dá)式。
Zabbix超級管理員可以對用戶進(jìn)行管理,并對不同的用戶進(jìn)行權(quán)限管理。用戶還可以獨立控制網(wǎng)頁是否彈框或聲音告警。聲音告警時長包括一次、10秒或者消息超時,消息超時即自定義告警時長,同時針對每個類型的告警可以單獨設(shè)置告警聲音的開光。
AFTN電報通常使用RS-232串口鏈路進(jìn)行傳輸,常用的接口協(xié)議轉(zhuǎn)換設(shè)備是MOXANPORT,其提供了SNMPv1協(xié)議作為網(wǎng)絡(luò)監(jiān)控工具。在Zabbix中可以通過SNMPv1客戶端進(jìn)行監(jiān)控,需要輸入對應(yīng)的SNMPOID以監(jiān)控對應(yīng)的數(shù)據(jù)項。比如設(shè)備啟動時間對應(yīng)的SNMPOID為1.3.6.1.2.1.1.3.0。
RS232串口鏈路需要監(jiān)控對應(yīng)NPORT的串口,如監(jiān)控PORT1端口接收電報字節(jié)數(shù),對應(yīng)OID為IF-MIB::ifInOctets.2,如發(fā)送電報的字節(jié)數(shù),則OID為IF-MIB::ifOutOctets.2。在MOXANPORT的OID中,序號1對應(yīng)Lan口,序號2對應(yīng)PORT1口,序號3對應(yīng)PORT2口,依次類推。
針對串口還可以增加觸發(fā)器,其表達(dá)式為{IP:moxa.RxCntOfPort1.diff()}=0,其中moxa.RxCntOfPort1為自定義的監(jiān)控項,該表達(dá)式的意思為最近一次的監(jiān)控數(shù)值和上次監(jiān)控數(shù)值沒有差異,這種情況表示最近一段時間沒有收到報文,通??梢哉J(rèn)為是上游鏈路或系統(tǒng)發(fā)生了故障。同時因為AFTN電報在白天和晚上有明顯的忙時和閑時的特征,可以自定義監(jiān)控的時間間隔,比如將1-7,00:00-14:00設(shè)置成60s,1-7,14:00-24:00設(shè)置成300s。
MQ消息隊列通常用來作為不同系統(tǒng)間數(shù)據(jù)交換的中間件,如果消費程序異常退出,會導(dǎo)致隊列積壓,并進(jìn)一步影響整體系統(tǒng)性能。MQ消息隊列深度的監(jiān)控,可以通過編寫UserParameter的方式實現(xiàn),如UserParamter=mq.curdepth[*],echo dis ql($2)curdepth|runmqsc $1|grep“CURDEPTH”|cut-d H-f2|cut-d(-f2|cut-d)-f1,其中runmqsc是IBMMQ提供的命令行管理工具,echo disql($2)curdepth將命令傳遞到runmqsc中,$1對應(yīng)隊列管理器名字,$2對應(yīng)隊列名。其后的grep和cut指令用于在返回結(jié)果提取數(shù)字的值。同時在ZabbixServer中配置對應(yīng)的監(jiān)控項值為mq.curdepth[NAME1,NAME2],其中NAME1為隊列管理器名對應(yīng)$1,NAME2為隊列名對應(yīng)$2。
在隊列深度的監(jiān)控項里可以配置觸發(fā)器, 如{IP:mq.curdepth[NAME1,NAME2].min(#3)}>100,其表示在最近三次詢問,隊列深度都大于100時,將會告警。
針對Mysql數(shù)據(jù)庫,ZabbixServer官方內(nèi)置了模板TemplateDBMySQL,并在Linux的Agent中預(yù)置了UserParameter模板。但如果數(shù)據(jù)庫安裝在Windows中,則需要自行設(shè)置UserParameter。為了便于在Windows的命令行中進(jìn)行字符串操作,可以先安裝coreutils、gawk、grep等GnuWin32工具。常用的監(jiān)控MySQLUserParamter有:
UserParameter=mysql.version,mysql-V
UserParameter=mysql.ping,mysqladmin ping|grep-c alive
UserParameter=mysql.status[*],mysql-uuser-proot-N-e“show global status where Variable_name=’$1’;”|gawk“{print $$2}”
mysql.version用來查詢數(shù)據(jù)庫版本,mysql.ping監(jiān)控數(shù)據(jù)庫是否在線,mysql.status監(jiān)控數(shù)據(jù)庫環(huán)境狀態(tài),預(yù)置的鍵值有Com_begin、Com_commit、Slow_quries等。
監(jiān)控系統(tǒng)中最常用到的是應(yīng)用監(jiān)控,對應(yīng)的鍵值有proc.mem(監(jiān)控進(jìn)程內(nèi)存,以字節(jié)為單位,返回整數(shù))、proc.cpu.util(監(jiān)控進(jìn)程cpu百分比,返回浮點數(shù))、proc.num(監(jiān)控進(jìn)程數(shù),返回整數(shù))。使用proc.num可以監(jiān)控程序的運(yùn)行與否,其參數(shù)為proc.num[
同時在觸發(fā)器里設(shè)置{IP:proc.num[java,,,apron2atc.jar].last()}<>1,當(dāng)進(jìn)程退出或者進(jìn)程重復(fù)啟動的時候?qū)a(chǎn)生告警。