September 22, 2017, Friday, 264

IPS Monitor

出自TYRC

跳轉到: 導覽, 搜尋

圖形化之連網設備資源應用狀況監看系統

桃園區網中心 楊素秋


  • 圖形化之連網設備資源應用狀況監看介面


目錄

壹. 動機

2012年 TANet 因南北向主要骨幹在上班時段出現壅塞,致影響國中小學校教學的進行.因此,各個區網中心均受命建置“頻寬管理設備”,除了延續原來舊設備P2P 智財權影片流量的阻絕,也希望設定 不同傳輸等級的QoS rules,以改善因主幹壅塞影響教學的情況.


經過多次的設備評選,桃園區網中心 採購了資安設備IPS (Intrusion Protection System) PaloAlto 5060,協助區網的多元流量管理. 由於 IPS 設備串聯在區網主要進出主幹, 設備本身有4百萬 sessions的上限, 依據初期維運經驗,當設備 CPU Rate (Data Plain) 高於70% ,網路傳輸會出現遲緩的狀況


維護團隊決定製作圖形化的IPS資源應用監看網頁,提供同時間監看其CPU Rate(Data 及 Management plain)、 Session Rate、運作溫度 等資源應用率, 協助觀察設備是否因網路攻擊出現運作瓶頸 ,作為IPS資源異常應用自動通告的依據.


貳.系統架構

連網設備資源應用監看系統架構(圖2.1) 包括: Ips.java (Java Bean程式)、IpsDAO.java (Data Access Object 程式) 、Main_Ips.java (網管紀錄擷取程式) 、Main_Ips_Png.java (統計繪圖程式) 、ips.zul (使用介面程式).

(一) Java Bean程式 Ips.java 定義了IPS 設備的IP 位址ips_ip 及欲觀察的 指標項目:cpu_mgt、 cpu_data、 sess_rate、high_temp、low_temp及created﹙記錄日期﹚及其對應之get 及set methods. 


(二) Dao (Data Access Object) 程式 IpsDAO.java 繼承com.google.code.morphia.dao.BasicDAO, 首先,指定透過google morphia 使用todo"的 mongo DB. 再透過 mongo DB之 filter 篩選及order排序功能 找出存入的當日各筆 IPS指標參數,並依增序排列.


(三) 網管紀錄擷取程式 系統透過crontable 定時執行Main_Ips.java (例如:5 minutes), 呼叫snmpGet.java 程式 連接 IPS網管 agent, 抓取 cpu_mgt、 cpu_data、 sess_rate、high_temp、low_temp 資料,存入 mongo 資料庫.


(四) 統計繪圖程式 Main_Ips_Png.java 程式會被 crontable 定時執行, 呼叫IpsDAO.java 程式, 取得增序排列之當日的各筆 IPS指標參數,建立 jFreechart dataset,建立chart圖形後, 並轉存成 PNG image檔.


(五) 使用介面程式 (View)  ips.zul 檔透過 zk framework將jFreechart 圖檔顯示到瀏覽網頁(圖2.2).使用者可以觀察到 IPS設備當日個時間點的指標參數變化狀況.


參.連網資源應用率數據的擷取

(一) SNMP網路管理協定

網路管理協定(Simple Network Management Protocol, SNMP)已廣泛用於連網設備資源的監控[1], 系統只要安裝 net-snmp 及net-snmp-utils, 即可透過 snmpget 或snmpwalk 查詢連網設備的SNMP MIB(Management Information Base)紀錄. 連網設備的 SNMPMIB OID Object identifier)大都可在網路上搜尋到,或要求業者提供. 以 PaloAlto 5060 IPS的: CPU Rate(Data Plain)、 CPU Rate(Management Plain) 、Session Rate、運作溫度 的 OID代碼如下.

mgtProcessRate  : .1.3.6.1.2.1.25.3.3.1.2.1

dataProcessRate : .1.3.6.1.2.1.25.3.3.1.2.2

panSession_Rate : .1.3.6.1.4.1.25461.2.1.2.3.1.0

panHigh_Temp  : .1.3.6.1.2.1.99.1.1.1.4.12

panLow_Temp  : .1.3.6.1.2.1.99.1.1.1.4.13


(二) SNMP4J

SNMP4J為 物件導向的Free Open Source java API, 提供snmp managers 及snmp agents 的網路管理功能 [2,3]. 藉由org.snmp4j.* 可以輕易地撰寫Snmp client 程式(表1) 擷取欲觀察的 MIB紀錄值. 僅需依序建立: TransportMapping、 CommunityTarget、 PDU object、 建立Snmp object /送出 request 到 agent 、取得agent 的回應(Response)、取得所指定 OID對應的網管 MIB資訊.

表1. Snmp client 子程式

private static int  Snmpget(String snmp_oid) { 
     TransportMapping transport = new DefaultUdpTransportMapping();
     transport.listen();
    // Create Target Address object
     CommunityTarget comtarget = new CommunityTarget();
     comtarget.setCommunity(new OctetString(community));
     comtarget.setVersion(snmpVersion);
     comtarget.setAddress(new UdpAddress(ipAddress + "/" + port));
     comtarget.setRetries(2);
     comtarget.setTimeout(1000);
    // Create the PDU object
     PDU pdu = new PDU();
     pdu.add(new VariableBinding(new OID(snmp_oid)));
     pdu.setType(PDU.GET);
     pdu.setRequestID(new Integer32(1));
    // Create Snmp object for sending data to Agent
     snmp = new Snmp(transport);
    // Create Snmp object & sending request
            ResponseEvent response = snmp.send(pdu, comtarget);
            System.out.println("PeerAddress:" + response.getPeerAddress());
            PDU responsePdu = response.getResponse();
            if (responsePdu == null) {
                System.out.println(ipAddress + ":Request time out");
            } else {
                Vector vbVect = responsePdu.getVariableBindings();
                if (vbVect.size() == 0) {
                    System.out.println(" pdu vb size is 0 ");
                } else {
                  Object obj = vbVect.firstElement();
                    VariableBinding vb = (VariableBinding) obj;
                    System.out.println(vb.getOid() + " = " + vb.getVariable());
                    res = vb.getVariable().toInt();
                }
            }
        } catch (Exception e) {
            System.out.println("SNMP Get Exception:" + e);
        } finally {
            if (snmp != null) {
                try {
                    snmp.close();
                } catch (IOException ex1) {
                    snmp = null;
                }
            }
       }
    return res;
   }



四. JFreechart 繪製圖檔

JFreeChart為Free Open Source 的圖形繪製java程式庫[4,5], 藉由org.jfreechart.data, org.jfreechart.chart 程式開發者可以輕易地輸出多樣化的精美統計圖形檔(包括: PNG and JPEG). JFreechart 程式庫下載網址: http://sourceforge.net/projects/jfreechart/files/1.%20JFreeChart/


首先, Main_Ips_Png.java 程式透過 IpsDAO.java 讀取儲存於資料庫之當日cpu_mgt、 cpu_data、 sess_rate、high_temp、low_temp 資料,分別加入對應之 dataset series (series1、series2、series3、series4、series5). 呼叫 createTimeSeriesChart()、 ChartUtilities.saveChartAsPNG() 創建及儲存IPS設備之資源應用監看圖形檔(圖4.1).


透過單日之IPS資源應用狀況之圖形介面,於 圖4.1, 網管可以看得到 設備運作溫度(高溫: 50度C, 低溫: 45度C). CPU資源及 session 資源使用率大都低於60%. 然而, 反觀2013-09-23 的狀態圖 (圖4.2),可以清楚看得多個 cpu_mgt、 cpu_data及 session 資源使用率 的突波.



伍. 結語

透過IPS資源應用狀況之圖形介面, 網管人員可以方便網管找到 設備運作之異常時段(cpu_mgt_rate、 cpu_data_rate、 session_rate使用率大於70%). 進而查詢桃園區網之另一UDP flooding 偵測系統: Cloud-based FDNS (http://hadoop5.tyc.edu.tw/Tops/), 找出 burst 對應時段之詳細異常紀錄: 包括: IP address 、輸出入流量(sum_in、sum_out)、 輸出入連結量(cnt_in , cnt_out)、封包大小 packet size ( pkz_in, pkz_out)等具體數據,找出IP主機用戶, 協助相關的處理.


參考文獻

1. SNMP tutorials, http://www.net-snmp.org/wiki/index.php/Tutorials

2. SNMP4J - The Object Oriented SNMP API for Java Managers and Agents, http://www.snmp4j.org/index.html

3. Snmp4j - Snmp Get Example, http://techdive.in/snmp/snmp4j-snmp-get-example

4. Welcome To JFreeChart, http://www.jfree.org/jfreechart/

5. JFreeChart: Line Chart Demo, http://www.java2s.com/Code/Java/Chart/JFreeChartLineChartDemo6.htm

6. Cloud-based FDNS, http://www.tyrc.ncu.edu.tw/.