技术栈的差异和权限模型的限制。
以下我将从 问题核心、具体问题与解决方案、最佳实践配置步骤 三个方面进行详解。
一、 核心问题根源:协议与权限
ZABBIX监控通常使用Agent或SNMP,但ESXi在这方面有其特殊性:
ESXi的“精简性”:ESXi是一个高度定制化、精简的Hypervisor,并非完整的Linux发行版。其用户空间工具非常有限。
ZABBIX Agent的困境:
- 官方不支持:VMware没有提供官方的ZABBIX Agent,安装通用Linux Agent可能破坏系统完整性,且升级ESXi后会被覆盖。
- 安全风险:在Hypervisor层安装非官方软件不被VMware推荐,可能存在兼容性和安全隐患。
SNMP的局限性:
- ESXi的SNMPv3功能阉割:ESXi 6.7+及7.0+版本中,SNMPv3仅提供只读访问,且社区字符串是固定的(
$@$@$@$@$@$@$@$@),无法自定义。这带来了安全和功能限制。
- 信息有限:通过SNMP获取的信息深度和广度通常不如VMware原生API。
真正的出路:VMware官方API- vSphere API (SOAP):这是VMware管理的黄金标准。ZABBIX通过其 “VMware监控” 功能调用此API,可以获取最全面、最可靠的虚拟机及主机性能数据。
- REST API (较新):vSphere 7.0+增强了REST API,但ZABBIX的VMware监控目前主要基于SOAP API。
结论:使用ZABBIX的“VMware监控”功能是监控ESXi主机(及其上虚拟机)的官方推荐和最有效方式。
二、 常见具体问题与解决方案
问题1:ZABBIX Server无法发现ESXi主机或虚拟机
- 症状:配置了VMware主机,但“主机”页面看不到自动发现的ESXi或VM,数据项没有数据。
- 原因与排查:
- URL格式错误:在ZABBIX前端配置VMware主机时,“URL”字段格式应为
https://<vCenter_IP_or_FQDN>/sdk 。绝对不能直接填写ESXi主机的IP(除非直接监控单台ESXi,不推荐)。
- 凭证错误:使用的vCenter用户权限不足。需要一个具有只读权限的vCenter用户。
- SSL证书问题:ESXi/vCenter默认使用自签名证书,ZABBIX Server可能拒绝连接。
- 防火墙:ZABBIX Server所在主机无法访问vCenter的443端口。
- 解决方案:
- 凭证:在vCenter中创建一个专门用于监控的只读角色(如
ZabbixMonitoring),并将其分配给一个用户(如 zabbix@vsphere.local)。
- SSL证书:
- (推荐、简单) 在ZABBIX Server上,编辑Zabbix Server配置文件(
zabbix_server.conf),找到 VMware 相关参数,设置:VMware.timeout=60s
VMwareCache.size=256M
VMwareCache.update=60s
- 关键步骤:将vCenter或ESXi的自签名证书导入到ZABBIX Server所在操作系统的受信任根证书库中。对于基于RHEL/CentOS的ZABBIX Server:
# 获取证书
openssl s_client -connect <vCenter_FQDN>:443 -showcerts </dev/null 2>/dev/null | sed -n '/-----BEGIN/,/-----END/p' > vcenter.crt
# 导入到系统信任库
sudo cp vcenter.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust
# 重启Zabbix Server
sudo systemctl restart zabbix-server
- 直接使用IP:如果必须直接监控单台ESXi(无vCenter),URL为
https://<ESXi_IP>/sdk,但需要解决其更严格的证书和权限问题。
问题2:监控数据不全或只有部分VM被监控
- 症状:ESXi主机本身有数据,但其下的虚拟机只有部分出现,或者虚拟机数据项缺失(如磁盘IO、网络流量)。
- 原因:
- vCenter权限不足:使用的账户对部分虚拟机所在的数据中心、文件夹或资源池没有“只读”访问权限。
- ZABBIX配置问题:
zabbix_server.conf 中 VMwareCache.size 设置过小,无法容纳所有虚拟机对象。
- 虚拟机状态:已关机、模板或未注册的VM不会被自动发现。
- 解决方案:
- 确保监控账户在vCenter层面具有全局只读权限。
- 根据环境规模增大
VMwareCache.size(例如从默认的8M增加到256M或更高)。
- 检查自动发现规则和动作,确保过滤条件正确(例如,不包含“模板”)。
问题3:性能问题:ZABBIX Server负载高或数据延迟
- 症状:ZABBIX Server进程(特别是
vmware collector进程)CPU/内存使用率高,ESXI数据更新缓慢。
- 原因:
- 采集频率过高:VMware监控默认的“主机”和“虚拟机”低级自动发现规则(LLD)间隔可能太短。
- 规模过大:单个vCenter下有成百上千台虚拟机,单个ZABBIX Server实例处理压力大。
- 网络延迟:ZABBIX Server与vCenter之间网络不稳定。
- 解决方案:
- 调整采集间隔:将VMware主机级别的“主机”和“虚拟机”LLD规则间隔从默认的1小时调整为更合理的值(如6小时或12小时),因为基础设施变化不频繁。同时,调整性能数据项的更新间隔。
- 分布式部署:使用ZABBIX Proxy。将Proxy部署在靠近vCenter的位置,由Proxy负责从vCenter采集数据,然后发给Server。这能显著减轻Server负载,并提高可靠性。
- 优化配置:确保
VMware.timeout 设置合理(如60s),避免因超时重试导致堆积。
问题4:监控项不支持或数据不准确(如存储、网络详情)
- 症状:无法获取到具体的存储延迟、数据存储容量详情,或虚拟交换机端口级别的流量。
- 原因:
- ZABBIX自带的VMware监控模板(如
Template VM VMware 和 Template VM VMware Guest)提供的是通用核心指标(CPU、内存、磁盘空间、基本网络IO)。更细粒度的指标(如每个LUN的延迟、每个端口的包错误数)需要通过LLD进行定制开发。
- 解决方案:
- 自定义LLD:利用ZABBIX的低级自动发现功能,编写自定义的JavaScript/Python脚本(通过ZABBIX的 “外部检查” 或 “脚本” 功能),调用vSphere REST API(vSphere 7.0+更好)或PowerCLI,来发现和监控这些特定对象。
- 使用社区模板:在ZABBIX官方社区或GitHub上搜索更高级的VMware监控模板,这些模板可能已经包含了更丰富的LLD规则。
三、 最佳实践配置步骤摘要
准备vCenter账户:
- 在vCenter SSO中创建专用用户(如
zabbix_monitor)。
- 创建一个全局的“只读”角色(或使用内置的
ReadOnly),并将此角色在vCenter根层级赋予该用户。
配置ZABBIX Server:
在ZABBIX Web前端添加VMware主机:
- 创建新“主机”。
- 主机名称: 任意,如
vCenter-Prod。
- 群组: 归入类似
VMware vCenter 的组。
- 最重要:在 “主机”字段不要填IP,留空或填vCenter FQDN。在“主机接口”部分,添加一个类型为“VMware”的接口,地址填写vCenter的IP或FQDN。
- 链接模板: 链接
Template VM VMware(用于监控vCenter和ESXi主机自身)。
- 凭证: 在“Macros”部分,添加两个宏:
{$VMWARE.URL} = https://<vCenter_FQDN>/sdk
{$VMWARE.USERNAME} = zabbix_monitor@vsphere.local
{$VMWARE.PASSWORD} = 你的密码 (考虑使用“密钥库”功能存储加密密码)。
等待与验证:
- 保存后,等待几分钟(取决于
VMwareFrequency)。
- 检查“最新数据”,筛选主机为刚创建的vCenter主机,应能看到ESXi主机及其虚拟机的性能数据项开始填充。
- “主机”列表应会自动出现已发现的ESXi主机和虚拟机。
(可选)使用Proxy:
- 如果环境庞大或多个站点,在另一个服务器上安装ZABBIX Proxy。
- 在Proxy配置中指向ZABBIX Server。
- 在Web前端添加Proxy。
- 将上述VMware主机的“由Proxy监控”选项更改为你新添加的Proxy。
通过遵循以上方法和最佳实践,你可以构建一个稳定、高效且全面的ZABBIX监控平台,覆盖你的整个vSphere虚拟化环境,从而有效预警性能瓶颈和故障。