其实想监控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性能还是挺关心的。