搜尋此網誌

2012年6月7日 星期四

[迷你好兔] 啟用 vSphere 5 的 snmp 功能

VMware對於 vSphere 這麼一套應用於大量服務環境下的虛擬化系統,雖然使用 vSphere Client 就可以看到資源的使用狀況,但是缺乏歷史紀錄的功能,讓管理時總覺得缺了那麼些東西。沒關係,我們都知道有 snmp 這個老朋友可以幫助我們主機進行主機或網路設備的管理。幸運的是,vSphere 本身支援 snmp 的功能,只不過預設是關閉的。
不過是啟動個 snmp ,應該是很容易的事情吧?經過一番搜尋後,我查到啟動 vSphere 的 snmp 功能主要有兩種方式,一種是登入 host 後直接修改設定,另外一種則是透過 VMware vSphere Infrastructure Managemenet SDK 從遠端加以設定。二話不說,我當然是選利用 SDK 從遠端加以設定啊,不然一台一台設定多累啊。沒想到這是一個錯誤的選擇,花了我好一陣子才順利的啟動 vSphere 的 snmp 功能,所以也才有這篇文章的出現。

廢話不多說,同樣一步一步來完成今天的目標吧。
  1. 準備一台 Ubuntu 10.4 (或其他支援的系統) 的機器。
    這是卡關的第一步。我一開始採用 CentOS 6.2 的機器,在排除某狀況後,直到出現 uuid 引入檔錯誤 (路徑關係) 的那一刻我就決定放棄 CentOS 6.2,直接安裝一台 Ubuntu 10.4 的機器。反正使用 vSphere 後,什麼不多,就是機器多。我安裝的是 64 位元的 server 版。

  2. 安裝其他需求的套件
    有兩個額外套件需要安裝,分別是 perl-doc 與 uuid-dev。指令是
    apt-get install –y perl-doc 
    apt-get install –y uuid-dev

  3. 下載 vSphere SDK for Perl
    網址是
    http://www.vmware.com/download/download.do?downloadGroup=SDKPERL50U1
    請記得選擇 64 位元的版本。

  4. 解開壓縮檔 指令是
    tar xvfz VMware-vSphere-Perl-SDK-5.0.0-422456.x86_64.gz

  5. 修改 vmware-install.pl
    這是卡關的第二步,安裝程式會檢查是否已經設定 http 與 ftp 的代理伺服器,沒有設定還不給裝。但是現在一般的網路環境應該是不需要設定這些參數,所以我們要修改相關的程式碼。

    指令是
    cd vmware-vsphere-cli-distrib/ 
    vi vmware-install.pl

    將下列程式註解掉或直接刪除都可,註解的方式就是在每行前面加上 # 這個符號。
    if ( direct_command("env | grep -i http_proxy") ) {
        $httpproxy = 1; 
    } else {
        print wrap("http_proxy not set. please set environment variable 'http_proxy' e.g. export http_proxy=http://myproxy.mydomain.com:0000 . \n\n", 0); 
    } 
    if ( direct_command("env | grep -i ftp_proxy") ) {
        $ftpproxy = 1; 
    } else {
        print wrap("ftp_proxy not set. please set environment variable 'ftp_proxy' e.g. export ftp_proxy=http://myproxy.mydomain.com:0000 . \n\n", 0); 
    } 
    
    if ( !( $approx && $httpproxy)) {
        uninstall_file($gInstallerMainDB);
        exit 1; 
    }

  6. 進行安裝
    指令是
    ./vmware-install.pl

    看完版權宣告後請輸入 "yes",開始安裝的準備動作,準備完後會問你要安裝到哪個路徑下。預設是安裝到 /usr/bin 這個路徑,但是我選擇安裝到 /usr/local/bin 這個路徑。

  7. 確認已經正常安裝完畢
    最好的方式就是實際進行 snmp 的操作,我們先來查看 host 的 snmp 設定。指令是
    vicfg-snmp --server host_ip –s

    接著輸入你的帳號跟密碼。
    Enter username: 輸入你的帳號 
    Enter password: 輸入你的密碼 
    Current SNMP agent settings: 
    Enabled  : 0 
    UDP port : 161 
    Communities : 
    Notification targets : 
    Options : 
    EnvEventSource=indications

    看到這些資訊表示你已經連上了 host,而且 snmp 預設是關閉的。

  8. 設定並啟用 snmp
    指令是
    vicfg-snmp --server host_ip -E -c public

    其中 public 是你想要設定的社群 (community) 名稱。建議改成你自己知道的名稱,而不要使用 public 這種菜市場名字。
    Enter username: 輸入你的帳號 
    Enter password: 輸入你的密碼 
    Changing community list to: public... 
    Complete. 
    Enabling agent... 
    Complete.

  9. 再次確認
    指令是
    vicfg-snmp --server host_ip –s
    Enter username: 輸入你的帳號 
    Enter password: 輸入你的密碼
    Current SNMP agent settings: 
    Enabled  : 1 
    UDP port : 161 
    Communities : 
    public

  10. 透過 snmpwalk 讀取 snmp 的資料
    指令是
    snmpwalk –v 2c –c public host_ip

    順利的話,你會看到類似下列的資訊。
    SNMPv2-MIB::sysDescr.0 = STRING: VMware ESX 5.0.0 build-469512 VMware, Inc. x86_64 
    SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.6876.4.1 
    DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (188729027) 21 days, 20:14:50.27 
    SNMPv2-MIB::sysContact.0 = STRING: not set 
    ...
嚴格說來,除了兩個小卡關點必須注意之外,整個過程並不複雜。如果你很有好奇心,還是可以登入 host (透過 ssh),找到相關的設定檔 (位置是 /etc/vmware/snmp.xml)。裡面的內容應該如下:

<config>
   <snmpSettings>
     <communities>public</communities>
     <enable>true</enable>
     <targets/>
   </snmpSettings> 
</config>

你沒看錯,就是這麼簡單。如果你直接修改這個檔案,記得要執行 services restart 這個指令才會生效。

vSphere 的 snmp 功能在設定很簡單,所以有些進階設定也就無法進行,像是加密、支援不同的view等。此外,snmp 所能提供的資訊也不是很多。vmware 的 snmp 比較強調在 snmp trap 的能力,以提供一個當異常發生時的通知方式。儘管如此,用來當做基本的監控,還是已經足夠了。例如,下圖就是利用 CACTI 來監控 host 的網卡流量:

esxi1

透過 snmp 的支援,可以讓我們把 vSphere 納入現有的網管工具一併加以管理,著實方便多了,不是嗎?

About