在上一篇拙作裡面, 筆者大略的展示了 OpenNMS SNMP 的效果, 還不錯吧? 筆者用這招 "拍" 死很多案子不順利牽拖網路硬體的廠商 (廠商: 原來我在你心中只是一隻蒼蠅...) .心動不如行動, 行動不如叫別人動... 啊, 別這樣啦, 還是請貴官動個手做看看, 這樣底下的工程師才不會在 m01 上面 po 文罵長官豬頭.

回到正題, 這次我們的目標是:

讓 OpenNMS 可以透過 SNMP 收集 Windows 的資料

此招有四個步驟, 如下:

  1. 在 Windows 2003 Server 上面安裝 SNMP Service
  2. 在 Windows 2003 Server 上面 "設定" SNMP Service
  3. 在 Windows 2003 Server 上面安裝 SNMP Informant
  4. 設定 OpenNMS 來搜刮 (Collect) Windows SNMP 的資料

以下就對每個步驟詳細說明囉.

 

1. 在 Windows 2003 Server 上面安裝 SNMP Service

執行 "新增或移除程式": "開始" --> "控制台" --> "新增或移除程式"

 Add/Remove Program

(1). 按 "新增/移除 Windows 元件"

(2). 點選 "Management and Monitoring Tools" (註: 不是勾選)

(3). 按 "詳細資料"

(4). 勾選 "Simple Network Management Protocol (SNMP) 與 "WMI SNMP 提供者"

(5). 按 "確定"

(6). 按 "下一步"

接下來就是 Windows 安裝程式的 "標準作業程序": 遇到到 "下一步" 就果決的按下去, 看到螢幕上有逐漸長(ㄓㄤˇ)長(ㄔㄤˊ)的藍色光條, 就喝著咖啡兩眼無神的盯著, 直到安裝完畢!!

W2K3 Install SNMP Service 

 

2. 在 Windows 2003 Server 上面 "設定" SNMP Service

安裝完了, 可得要設定一下, 否則~ 小心!! 駭客就在你身邊~

請: 開始功能表 --> 控制台 --> 系統管理工具 --> 服務

Start configure Windows SNMP Service 

(1). 找到 SNMP Service, 並用滑鼠雙擊打開內容

(2). 切換頁籤到 "代理程式"

(3). 填入聯絡人與位置 (非必填)

(4). 勾選全部的服務 ("實體" 與 "資料連結及子網路" 預設沒有勾選)

(5). 請繼續看下一張圖片 ...

Configure SNMP Service 1 

重點來了, SNMP 可以提供很多 "敏感" 的資料, 我們總不會允許任意電腦來查詢 SNMP 資料吧?

(6). 切換到 "安全性" 頁籤

(7). 按 "新增" 以增加群體名稱 (Community Name), 這時候會出現 "SNMP 服務設定" 畫面

(8). 群體權利選擇 "唯讀", 群體名稱隨便取一個 (目前先取 MYSNMP 好了, 這相當於是 SNMP 與 NMS 之間的通關密語)

(9). 按 "新增", 回到 "安全性的頁面"

(10). 點選 "可從所有主機接受 SNMP 封包" (註: 這是不良示範!! 在 Production 環境應該只允許 "從下列主機接受 SNMP 封包", 並新增 OpenNMS 的主機就好, 以免駭客猜到我們簡單的通關密語, 並進一步取得 SNMP 資料)

(11). 按 "確定", 即可完成 SNMP 的設定

Configure SNMP Service 2 

 

3. 在 Windows 2003 Server 上面安裝 SNMP Informant

安裝並設定好 Windows SNMP Service 其實就可以運作了, 不過 Windows 所附的 SNMP Service 功能實在有點陽春 ... 幸好有佛心的 SNMP Informant 提供免費的 Standard 版本給大家使用, 那就不客氣的來用囉 ^^ 

(註: 這個可以略過不裝直接跳到步驟4, 不會影響運作)

(1). 瀏覽 SNMP Informat 的官網 http://www.wtcs.org/informant

(2). 點 Download

(3). 在 Choose the file 選項選擇 "SNMP Informat-STD v1.6 (current production release)

(4). 按 "Download Now", 即可開始下載 informant-std-1.6.zip

Download SNMP Informant 

打開剛剛下載的zip檔案 (推薦用7-zip, 另一個 Open Source 的佳作), 請先閱讀 "Installation and Configuration Guide.pdf" ..... 啊, 你沒有閱讀!! Bad Admin, 去牆邊罰站 10 分鐘 (典故來自於 qmail 的安裝指引).

開玩笑的 ^^ 請執行 "informant-std-16.exe, 接下來就又是 Windows 安裝程式的標準作業程序了 ^^

SNMP Informat Installer  

OK!! Windows 2003 Server 端的作業到此結束, 下台一鞠躬... 啊~ 這樣還不行啦~ OpenNMS 也是要設定一下的, 請各位長官再耐心一下下囉 ^^

 

4. 設定 OpenNMS 來搜刮 (Collect) Windows SNMP 的資料

OpenNMS 預設會以 public 的群體名稱 (Community Name) 來偵測 Node 是否有提供 SNMP 服務, 有些設備 (例如事務機, 網路設備) 的 SNMP 群體名稱 (Community Name) 也是 public, 因此大家有時候會發現, 即使沒有設定 OpenNMS 的 SNMP, 有的 Node 也會 "自動" 奉上他的 SNMP 資料. 當然這是很不安全的作法, 時機壞壞, 有開方便之門的話, 請務必上個密碼鎖.

好啦, 開始設定我們的 OpenNMS 囉.

OpenNMS Web Console 的主功能表 "Admin" --> "Configure SNMP Community Names by IP"

Start configure SNMP on OpenNMS 

因為我們只設定 1 台目標主機, 因此只需要填寫 "First IP Address", 以及 "Community String" 即可. 請填上我們剛剛設定的那台 Windows 2003 Server 的 IP, 以及 "MYSNMP" 後按 "Submit"

Configure SNMP on OpenNMS 

由於 OpenNMS 的 Capd 預設每 24 小時才重新掃描一次, 請大家回去睡覺等明天.... 啊, 等等!! 這樣不就每改一次設定就要睡覺一次? 呵呵, 當然不是這樣囉!! OpenNMS 雖然 Open, 但是並不笨~ 我們可以用 OpenNMS 提供的 Rescan 功能強迫 OpenNMS 的 Capd 立即掃描該 Node 的服務是否有改變. 所以, 請找到該 Node (主功能表的 Node List) 後, 點 "Rescan"

Force rescan 

點完後會出現確認的畫面, 請按 "Rescan" 按鈕 (為何這裡特地要再確認一次? ~"~ 筆者到現在還努力思考箇中原因~)

Confirm force rescan 

確認後會回到 Node 的畫面, 但是.... Rescan 前跟 Rescan 後的畫面好像沒什麼改變耶? OpenNMS 還沒回神嗎? 呵呵, 請大家稍安勿躁, 注意一下 Recent Events 裡面多出了一個黃色的 Warning "A Services scan has been forced on this node", 原來~ Rescan 已經在進行中, 只是需要一點時間, 所以請大家去喝杯咖啡 (到現在為止總共喝幾杯了?) 後, 再回來看結果.

Start rescan forcely 

等掃描完畢之後, 畫面上看起來就不一樣了, 多了一個 "SNMP Attributes" (如果設定都對的話), 其中的 Name 就是電腦名稱 (Computer Name), "Location" = SNMP 設定時我們填寫的 "位置", "Contact" 則是我們在設定 SNMP 時所填寫的 "聯絡人"

 Forced rescan has completed 

Ok, 設定完畢!! 過幾個小時候, 就可以從 Resource Graphs 看到上一篇文章所展示的資源歷史圖表. 祝大家設定順利囉!!

 

大家: (舉手) 為什麼 Location 與 Contact 都是亂碼!? 你不是在 Windows SNMP Service 設定的時候敲了中文字嗎?

筆者: 因為 Windows SNMP Service 回應給 OpenNMS 的 Location/Contact 資料是 Big5 編碼, OpenNMS 不認得.

大家: 你吹牛~ (參考7-11的廣告)

筆者: .....=_=|||

 

好吧, 證明一下, 下圖是 Wireshark (Open Source 的 Network Sniffer) 所抓到的 SNMP 封包, 這是 OpenNMS 對我們的 Windows Server 進行查詢 (getBulkRequest) 後, Windows SNMP Service 回應 (get-response) 給 OpenNMS 的自白書. 筆者特別標示出這個封包裡面的一些資料:

b1 60 a6 db a4 76 ab f5 ... 

SNMP Packet 

以繁體中文的 Big5 編碼來解析這些16進位, 我們會發現 (請用內碼輸入法)

b1 60 = 常

a6 db = 自

a4 76 = 己

ab f5 = 挖

....

以此類推

Big5 

由於 OpenNMS 收到這些資料後, 以為是 Unicode 編碼, "警察廣播電台" 聽成 "警察伯伯變態" (註: 我的6歲女兒真的這樣問我), 就直接塞到 PostgreSQL 裡面, 於是就變成大家在畫面上所看到的亂碼了, 了沒?

大家: (將信將疑) 那怎樣才可以避免?

筆者: (斬釘截鐵) 打英文!

大家: .... (丟紙杯~)

arrow
arrow
    全站熱搜

    Egg Chang 發表在 痞客邦 留言(6) 人氣()