1. 配置过程总的来说是比较简单的。结合官方文档,一般的环境都可以配置成功。
zabbix官方文档:https://www.zabbix.com/documentation/2.2/manual/vm_monitoring
其基本内容:
1) zabbix 2.2.0开始支持
2) Vcenter/Vsphere版本4.1及以上
3) zabbix在编译时必须 configure 里有 --with-libxml2 --with-libcurl,前者用来解析调用SOAP接口返回的XML,后者用来调用vcenter的SOAP接口
4) zabbix.conf配置
StartVMwareCollectors(0-250) 只有大于0时才能是该功能生效,意为预先配置的vmware监控实例数量。
VMwareCacheSize(256K-2G)内存中维护的vmware集群结构的大小,建议80M。
VMwareFrequency(10-864000)zabbix获取更新vmware集群结构的最小间隔时间,单位为分钟。
5) 模板在zabbix中已经预先配置好了,对于vcenter的HOST,指定为Template Virt VMware。
6) 原则上添加对vcenter的host监控时,不需要zabbix_agent,在Web页面输入必要的ip信息,关联好模板,
填写好三个宏(web页面上叫巨集)即可。
${URL}https://
${USERNAME}这个原文写的比较模糊,就是登录vcenter client的那个用户名,比如常见的Administrator
${PASSWORD}对应USERNAME用户的密码 见[2]
7) 配置好HOST后,经过VMwareFrequency时间后,zabbix监控到vmware vcenter机器上管理了那些esxi服务器,
并将其加入到HOST中并同Template Virt VMware Hypervisor模板关联,再进一步监控到哪些vm和volume,
也一并将其加入到HOST中并同Template Virt VMware Guest模板关联。
8) 在HOST自动发现并添加后,item的更新是根据每一个项目(item)设置的时间间隔来更新的,但是与VMwareFrequency有关,
因为check_simple大多都是从内存中维护的vmware集群结构中获取的值。
2. zabbix官网上的功能详细信息
功能描述: https://www.zabbix.org/wiki/Docs/specs/ZBXNEXT-1633
功能开发跟踪:https://support.zabbix.com/browse/ZBXNEXT-1633
3. 代码索骥
1) 所有获得内存中维护的vmware集群结构的代码在src/zabbix_server/vmware/vmware.c中
2) 所有获取item的值的代码在src/zabbix_server/poller/checks_simple.c和src/zabbix_server/poller/checks_simple_vmware.c中
初始化 vmware.c的zbx_vmware_init,在zabbix_server.c初始化时调用
主循环程序 main_vmware_loop,在zabbix_server进入主循环程序时调用,
其主要任务是vmware_service_update(),即通过调用vcenter的SOAP接口,获取hypervisors信息,vmlist信息等等一系列XML并解析,
最终构建和更新内存中维护的vmware集群结构的内容,如结构体zbx_vmware_service_t,zbx_vmware_datastore_t等等——此处还需具体列出。
item获取程序 src/zabbix_server/poller/poller.c的主循环程序main_poller_loop
调用get_values调用get_value调用checks_simple.c的get_value_simple
checks_simple.c的vmchecks数组维护了key和function的关系,并最终的function在checks_simple_vmware.c中
3) item获取的例子 vm.memory.size为例
模板中的键值叫vmware.vm.memory.size[{$URL},{HOST.HOST}],
在checks_simple.c中去掉vmware前缀,找到对应的function为check_vcenter_vm_memory_size
checks_simple_vmware.c中的check_vcenter_vm_memory_size,AGENT_REQUEST中的两个参数就是键值中的URL和HOST.HOST
从代码上看就是去取得内存中维护的vmware集群结构中该HOST的details的XML片段并且再细粒度的解析。
[1] 看网上很多人纠结于URL是否正确,因为用curl -I -k https://
这个vmware的KB也解释了,只处理SOAP协议,用curl -i -k --data "" https://192.168.30.222/sdk就可以判定URL没有问题。
[2] 看网上很多人纠结于用户名和密码是否正确,原因可能是密码中有XML需要转义的字符,比如<>之类的,
最简单的办法是避免这个问题,将密码改掉。