其實想監控Vmware已經不是一天兩天了,但一直因為沒有什么時間研究(其實是拖延癥)所以拖了快一年了也沒搞定。恰逢這次公司的VRO套件試用期到了,因為價格太貴的關系沒準備買正式版所以不得不找個方案來代替它。于是就花了一星期時間斷斷續續的搞了出來。
首先聊下我監控Vmware的幾個大類。
CPU | 存儲 | 內存 | 設備信息 | 常規信息 | 網絡 | VMS |
---|---|---|---|---|---|---|
總頻率 | 總容量 | 總容量 | 型號 | OS版本 | 流量 | OS版本 |
使用量 | 使用量 | 使用量 | BIOS UUID | Uptime | 廣播 | 電源 |
使用% | 使用% | 使用% | CPU參數 | 虛機數量 | 組播 | vm state |
IOPS | 回收量 | 生產廠商 | up/down | MAC地址 | ||
I/O延時 | Hostname | 網絡錯誤 | ||||
存儲可用性 |
還有些與系統運行關系不是太大的信息也有監控,但篇幅有限就不列舉了。
針對表格內會影響到系統運行的也都設置了觸發器閾值,方便發送郵件告警。
下面來聊下監控原理。
Vmware官方給出了一套python庫,允許開發者去讀寫Vmware系統。我們這里會用到的就是利用這個庫編寫的一個py腳本,一個shell腳本,以及一個xml監控模板。
這三個文件都不是我自己寫的,我也是抄的老外的-抄襲傳送門。不過這個腳本不太適用于我們不用proxy的用戶,下面簡書下使用方式。
1.搭建zabbix
這是常規操作,就不贅述了,需要教程的我這里給一個我寫的搭建教程鏈接-傳送門
2.導入xml模板
3.zabbix服務端安裝依賴
# yum -y install sblim-wbemcli.x86_64 pywbem.noarch python2-pyvmomi.noarch python-setuptools jq python-setuptools zabbix-sender.x86_64
# easy_install -U pysphere
# easy_install -U docopt
4.zabbix服務端安裝JQ,如果不安裝的話shell腳本內一條變量類型轉換語句會無法執行。
wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -ivh epel-release-latest-7.noarch.rpm
yum repolist
yum install jq #因為我的yum源里沒有JQ,所以還需要手動添加
如果不安裝JQ在執行自動發現時會收到如下報錯:
Item preprocessing step #1 failed: cannot apply multiplier "1048576" to value "/usr/lib/zabbix/externalscripts/agent_vsphere_wrapper:行281: jq: 未找到命令
cat: 寫入錯誤: 斷開的管道" of type "string": cannot convert value to numeric type
Item preprocessing step #1 failed: cannot apply multiplier "1048576" to value "/usr/lib/zabbix/externalscripts/agent_vsphere_wrapper:行281: jq: 未找到命令" of type "string": cannot convert value to numeric type
5.修改shell腳本
用文本編輯器打開agent_vsphere_wapper,將41和42行的grep "^Server=" /etc/zabbix/zabbix_proxy.conf改為grep "^Server=" /etc/zabbix/zabbix_server.conf。否則對于不用proxy的朋友會收到如下報錯。
value should be a JSON object #原因為python腳本中使用了netstat -p參數,權限問題,zabbix_agentd是zabbix用戶啟動的,默認不能執行netstat -p等命令,導致從服務器取到的自動發現腳本為空。
6.將腳本放到服務器
將兩個腳本上傳到/usr/lib/zabbix/externalscripts/,并為兩個腳本授權后重啟zabbix server
chmod a+x agent_vsphere_wrapper agent_vsphere
service zabbix-server restart
7.在vmware上進行一些配置
- 首先創建一個user權限的賬號,只讀權限即可。
- 打開vmware ssh,因為后面開啟snmp和mob via都需要在命令行模式下進行。
- 使用ssh終端連接vmware,執行如下命令:
vi /etc/vmware/snmp.xml #用vi編輯器打開snmp配置文件并用以下內容替換原內容,保險起見請在修改器備份該文件。
<?xml version="1.0" encoding="ISO-8859-1"?>
<config>
<snmpSettings>
<enable>true</enable>
<port>161</port>
<syscontact></syscontact>
<syslocation></syslocation>
<EnvEventSource>indications</EnvEventSource>
<communities>public</communities>
<loglevel>info</loglevel>
<authProtocol></authProtocol>
<privProtocol></privProtocol>
</snmpSettings>
</config>
#保存退出后即可在esxi控制頁打開snmp,下面開啟mob via,命令如下
vi-cmd proxysvc/add_np_service "/mob" httpsWithRedirect /var/run/vmware/proxy-mob
#等你查到UUID后即可運行以下命令關閉
vi-cmd proxysvc/remove_service "/mob" "httpsWithRedirect"
8.用瀏覽器打開https://你的esxi服務器ip/mob/?moid=ha-host&doPath=hardware.systemInfo 輸入root賬號密碼即可查到系統UUID,記下此UUID以備后用。
9.下面就是常規操作了,添加主機,監控模板,此處需注意的是需要添加五條宏,具體如下:
{$USERNAME} zabbix #這里是你創建的只讀用戶名
{$PASSWORD} YOUR_PASSWORD #這里是你創建的只讀用戶名的密碼
{$URL} https://你的esxi服務器ip/sdk
{$UUID} 你剛才查到的UUID
{$SNMP_COMMUNITY} public
10.至此vmware的監控就完成了,在實施過程中就被上面提到的三個報錯坑了四天,原來沒想到是沒裝JQ,還想著自己去修改腳本把get到的字符串轉換成數值呢。
最后再聊聊我前面放的效果圖,這是利用Grafana讀zabbix數據做的Dashboard,是不是挺有逼格的,現在Grafana我玩得還不溜,等玩溜了再寫一篇分享給大家。
最后感謝大家的閱讀,下面我準備開始研究SQL的監控,軟件的同事對SQL性能還是挺關心的。