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://<vcenterIP>/sdk 见[1] ${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://<vcenterIP>/sdk得到的返回时404, 这个vmware的KB也解释了,只处理SOAP协议,用curl -i -k --data "" https://192.168.30.222/sdk就可以判定URL没有问题。 [2] 看网上很多人纠结于用户名和密码是否正确,原因可能是密码中有XML需要转义的字符,比如<>之类的, 最简单的办法是避免这个问题,将密码改掉。
|