不過是啟動個 snmp ,應該是很容易的事情吧?經過一番搜尋後,我查到啟動 vSphere 的 snmp 功能主要有兩種方式,一種是登入 host 後直接修改設定,另外一種則是透過 VMware vSphere Infrastructure Managemenet SDK 從遠端加以設定。二話不說,我當然是選利用 SDK 從遠端加以設定啊,不然一台一台設定多
廢話不多說,同樣一步一步來完成今天的目標吧。
- 準備一台 Ubuntu 10.4 (或其他支援的系統) 的機器。
這是卡關的第一步。我一開始採用 CentOS 6.2 的機器,在排除某狀況後,直到出現 uuid 引入檔錯誤 (路徑關係) 的那一刻我就決定放棄 CentOS 6.2,直接安裝一台 Ubuntu 10.4 的機器。反正使用 vSphere 後,什麼不多,就是機器多。我安裝的是 64 位元的 server 版。 - 安裝其他需求的套件
有兩個額外套件需要安裝,分別是 perl-doc 與 uuid-dev。指令是apt-get install –y perl-doc apt-get install –y uuid-dev
- 下載 vSphere SDK for Perl
網址是
http://www.vmware.com/download/download.do?downloadGroup=SDKPERL50U1
請記得選擇 64 位元的版本。 - 解開壓縮檔 指令是
tar xvfz VMware-vSphere-Perl-SDK-5.0.0-422456.x86_64.gz
- 修改 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; }
- 進行安裝
指令是
./vmware-install.pl
看完版權宣告後請輸入 "yes",開始安裝的準備動作,準備完後會問你要安裝到哪個路徑下。預設是安裝到 /usr/bin 這個路徑,但是我選擇安裝到 /usr/local/bin 這個路徑。 - 確認已經正常安裝完畢
最好的方式就是實際進行 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 預設是關閉的。 - 設定並啟用 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.
- 再次確認
指令是
vicfg-snmp --server host_ip –s
Enter username: 輸入你的帳號 Enter password: 輸入你的密碼 Current SNMP agent settings: Enabled : 1 UDP port : 161 Communities : public
- 透過 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 ...
<config>
<snmpSettings>
<communities>public</communities>
<enable>true</enable>
<targets/>
</snmpSettings>
</config>
你沒看錯,就是這麼簡單。如果你直接修改這個檔案,記得要執行 services restart 這個指令才會生效。
vSphere 的 snmp 功能在設定很簡單,所以有些進階設定也就無法進行,像是加密、支援不同的view等。此外,snmp 所能提供的資訊也不是很多。vmware 的 snmp 比較強調在 snmp trap 的能力,以提供一個當異常發生時的通知方式。儘管如此,用來當做基本的監控,還是已經足夠了。例如,下圖就是利用 CACTI 來監控 host 的網卡流量:
透過 snmp 的支援,可以讓我們把 vSphere 納入現有的網管工具一併加以管理,著實方便多了,不是嗎?
沒有留言:
張貼留言