ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Zabbix 6.0监控vCenter 7.0实战:从安装配置到告警避坑全指南

Zabbix 6.0监控vCenter 7.0实战:从安装配置到告警避坑全指南 如果你和我一样每天面对几十台虚拟机、八九台ESXi宿主机vCenter自带的性能视图其实早就看腻了——它只能在Web页面里点开看没法在深夜把“这台宿主机CPU爆了”这件事主动推给你。把vCenter纳入Zabbix是很多虚拟化团队的刚需但Zabbix 6.0监控vCenter 7.0这条路我第一次走的时候也翻过车主机加进去了页面上显示“已启用”等了半小时“最新数据”干干净净什么都没有。后来才发现问题根本不在vCenter也不在模板而在Zabbix Server的一个默认参数。这篇文章把我整个落地过程完整记录下来从vCenter侧怎么创建最小权限账号、Zabbix Server侧被很多人忽略的VMware Collector机制到Web界面里那几个容易填错的宏再到我实际踩过的坑和排查链路。照着做基本能一次跑通就算出了问题也知道该往哪个方向查。适合已经装好Zabbix 6.0、准备把vCenter 7.0纳入统一监控的运维同学参考。1. 监控方案选型为什么我选了Zabbix原生VMware模板先说说方案选型。vCenter 7.0的监控路子其实不少SNMP、REST API自写脚本、Zabbix官方VMware模板。我身边很多人一上来就想着用SNMP去监控vCenter理由是简单但实际效果很有限。vCenter的SNMP Agent能提供的OID大多是系统基础信息像CPU、内存这种简单指标虚拟机级和宿主机级的性能数据很难完整拿全更没有自动发现那套机制。另一个极端是自己写脚本调vCenter REST API数据当然够全但意味着你要自己维护采集频率、数据落库、告警逻辑工作量不小后续迭代也是负担。Zabbix官方模板的好处是采集逻辑已经封装好了。它走的是vCenter的SOAP SDKHTTPS/443不需要在每台ESXi上装任何Agent也不需要你在虚拟机里装东西。模板自带自动发现集群、宿主机、虚拟机、数据存储都能自动找出来性能数据、电源状态、硬件健康状态一应俱全。在大规模环境下Zabbix的VMware Collector会把从vCenter拉回来的数据先缓存在内存里再由其他进程写入数据库这种设计避免了对vCenter API造成太大压力。从长期维护角度看这是性价比最高的路线。方案对比大概是这样的方便你根据自己环境判断方案数据完整度维护成本自动发现我的建议Zabbix官方VMware模板高低支持首选本文就是这个方案SNMP直接监控vCenter低低不支持不推荐做主监控自写脚本调REST API高高需自己实现特殊需求才考虑Zabbix监控vCenter实际有两条数据通道第一条是HTTPS SOAP API负责拉性能数据和状态信息这也是日常监控的主力第二条是vCenter的SNMP Trap负责把vCenter里的告警事件主动推给Zabbix这个属于锦上添花可以后续再搞。搞清楚这两条通道后面配置时你就不容易糊涂。2. 环境准备vCenter侧账号与Zabbix Server侧配置这节是返工率最高的地方。很多人配置步骤全对了最后卡在账号权限和Zabbix Server的VMware模块没启用上。2.1 vCenter侧创建只读监控账号千万不要直接用administratorvsphere.local当监控账号。维护规范是一方面更重要的是避免权限过大。我习惯在vCenter里创建一个专用账号比如zabbix-monvsphere.local然后给它分配“只读”角色。具体操作路径是在vCenter Web Client里选中根对象例如vCenter Server的FQDN右键“添加权限”添加用户zabbix-mon角色选择“只读”并勾选“传播到子对象”。这样Zabbix就能通过API读取整个vCenter树下的集群、宿主机、虚拟机、数据存储信息。有个小细节vCenter 7.0的权限分为“SSO用户”和“vCenter权限”两层。你光在SSO里创建用户还不够必须到vCenter对象上授权。如果你建完账号后Zabbix那边报权限不足优先检查是不是漏了授权这一步。2.2 检查Zabbix Server的VMware编译依赖Zabbix的VMware监控能力依赖libcurl和libxml2库。如果你是拿发行版仓库装的zabbix-server一般没这个问题。但如果你像我一样是从源码编译的配置的时候一定要带上这两个依赖./configure --with-libcurl --with-libxml2缺少依赖时Zabbix Server能正常启动但VMware相关功能不工作日志里会提示VMware monitoring不可用。这个错很隐蔽排查半天往往才发现编译参数就不对。确认编译是否支持有一个简单方法。Zabbix Server启动后用ps看一眼进程ps -ef | grep vmware如果看到类似zabbix_server: vmware collector的进程说明VMware相关组件已经起来了。没看到就要回到前面的步骤去查。2.3 必须调整的zabbix_server.conf参数这是整篇文章里最重要的一个坑。Zabbix默认配置下VMware Collector进程不会启动即使你在Web界面添加了VMware类型主机也不会去采集任何数据。打开zabbix_server.conf确认以下参数### Option: StartVMwareCollectors # Number of pre-forked vmware collector instances. StartVMwareCollectors2 ### Option: VMwareCacheSize VMwareCacheSize32M ### Option: VMwareFrequency VMwareFrequency60 ### Option: VMwareTimeout VMwareTimeout20StartVMwareCollectors默认是0必须改成至少1。我这里设置2监控规模不大够用了。VMwareCacheSize默认8M如果监控几百台虚拟机可能不够日志里会报缓存不足建议直接给到32M或更大。VMwareFrequencyZabbix每隔多少秒去vCenter拉一次数据默认60秒。因为vCenter本身的性能数据就有5分钟周期这个值保持默认就行不用调太快。VMwareTimeout默认10秒。vCenter 7.0在负载高的时候API响应会变慢10秒容易超时我一般调到20秒。改完配置文件后重启zabbix-server。注意别改完不重启就跑去Web界面折腾我见过不少同事栽在这一步。3. Zabbix Web界面添加vCenter主机的完整步骤配置好Server后接下来就是Web界面的操作。3.1 创建VMware类型主机时最容易搞错的三个地方在Zabbix Web界面进入“数据采集”-“主机”点击“创建主机”有三个地方特别容易出错第一类型必须选择“VMware”。很多人习惯性选成Zabbix agent结果数据永远不来。VMware类型意味着Zabbix会通过vCenter SDK去拉数据而不是在目标上装Agent。第二接口可以留空。Agent类型主机要填IP和端口但VMware类型主机的连接信息完全由宏{$VMWARE.URL}决定接口区域不需要填写直接留空保存即可。这一点和大多数人的直觉不一样。第三链接模板选“VMware”。模板在模板组“Virtual machines”下面名字就叫VMware。链接之后会自动带出一堆应用集、监控项和自动发现规则。3.2 宏参数详解与常见填写错误主机创建后在“宏”标签页配置以下宏宏示例值说明{$VMWARE.URL}https://vcsa.example.com/sdkvCenter SDK地址必须以/sdk结尾{$VMWARE.USERNAME}zabbix-monvsphere.localSSO账号不能漏后面的域名{$VMWARE.PASSWORD}你的密码密码含$或\时要注意转义{$VMWARE.NAME}vCenter-Prod连接别名多vCenter环境务必设置{$VMWARE.URL}是你需要格外小心的。vCenter 7.0的SDK服务地址是https://FQDN或IP/sdk不是根路径也不是/vsphere-client。如果你填错了路径Zabbix会报连接失败。另一个容易忽略的是{$VMWARE.USERNAME}。vCenter 7.0默认SSO域是vsphere.local所以用户要写成zabbix-monvsphere.local或者administratorvsphere.local不要只写zabbix-mon。{$VMWARE.NAME}在单vCenter环境下可填可不填但我建议还是设置一个有意义的名字。后面监控项、触发器里区分来源都靠它尤其当你有多套vCenter时不设置会非常痛苦。3.3 宏密码的特殊字符转义问题如果你用模板宏直接填密码密码里含有$、\、这些字符时Zabbix在解析宏的时候会有特殊规则。表现往往是界面保存成功但采集数据报Login failed或者认证失败日志里看不到明确原因。最简单粗暴的处理方式在vCenter里把监控账号的密码改成纯字母数字组合。监控账号本来就不需要高复杂密码这个策略能省掉很多不必要的排障时间。如果你确实不能改密码那就需要注意宏值里特殊字符的转义方式在Zabbix官方文档里有详细说明这里不展开。4. 连接验证与首屏数据检查很多人在配置完主机后立刻去“最新数据”里刷发现一片空白就开始怀疑人生。其实这里有一个正常的等待期但同时也要掌握验证连通性的方法。4.1 先用curl验证vCenter SDK是否可达在Zabbix Server上直接用curl测试一下SDK地址curl -k -i https://vcsa.example.com/sdk如果vCenter SDK服务正常即使没有携带认证信息服务端也会返回HTTP 200和一个SOAP格式的XML响应比如类似soapenv:Envelope的内容。如果这里都访问不通说明是网络、DNS或证书层面的问题。注意-k参数是跳过证书验证因为vCenter 7.0默认是自签名证书或内部CAZabbix一般能处理但curl测试时跳过更方便。4.2 查看Zabbix Server日志和进程状态配置完并重启服务后重点看日志grep -i vmware /var/log/zabbix/zabbix_server.log正常情况下能看到VMware monitor启动相关的字样。再看一眼进程ps -ef | grep vmware看到vmware collector进程说明采集器起来了。之后去“最新数据”页面筛选刚才创建的vCenter主机搜索vmware就能看到监控项开始陆续出现数据。4.3 为什么前15分钟数据可能是空的vCenter 7.0本身的性能数据不是实时的默认5分钟一个采集周期。Zabbix的VMwareFrequency虽然设的是60秒但它每次去拉取时拿到的可能是上一轮性能数据。所以刚添加主机的前5到15分钟某些监控项没数据或数据稀疏都是正常现象。判断一个监控项是否正常不是看有没有点而是看状态是不是“已启用”。只要状态正常数据点是早晚的事。千万别因为前15分钟没出数据就反复重启服务、删主机重加那样只会让问题更乱。4.4 常见监控项错误信息对照把最常见的几类错误整理一下方便你对照排查现象可能原因处理方式全部vmware.*监控项状态为“不支持”StartVMwareCollectors为0修改conf并重启zabbix-server报错Cannot connect to VMwareURL错误或网络不通curl测试SDK地址检查宏{$VMWARE.URL}报错Login failed账号密码错误或特殊字符问题核对宏必要时改用纯数字字母密码报错Permission denied用户未在vCenter授权检查全局只读权限是否传播到子对象数据不更新但状态正常vCenter性能周期未到等待5-15分钟再观察日志提示VMware cache size too smallVMwareCacheSize不足调大VMwareCacheSize并重启5. 实际踩坑记录从“没有数据”到“刷出几百个VM”的排查链路下面这些坑是我实际过程中踩过的每一个都花了不少时间。写出来不是为了列问题而是让你知道排查时该按照什么思路走。5.1 场景一配置全部正确但数据死活不来第一次配置时我自认为所有步骤都做对了vCenter账号建了、主机也加了、宏填了但“最新数据”就是空的。查日志没有报错查Web界面主机状态“已启用”。这个现象像极了Zabbix的“薛定谔式故障”。排查链路是这样的先想到去确认采集器进程执行ps -ef | grep vmware果然没有vmware collector进程。再回看zabbix_server.conf发现StartVMwareCollectors是默认的0注释都没取消。改配置、重启大概半分钟后进程起来了数据也逐渐出来了。这个坑的本质是Zabbix默认不启用任何VMware采集能力但Web界面不会给你任何提示。所以以后配置VMware主机之前第一件事就是确认这个参数。5.2 场景二密码里的特殊字符导致Login failed账号、网络、URL全查了一遍都没有问题但日志就是报Login failed。后来我是在Zabbix Web界面里把密码重新填了一遍还是不行最后在vCenter里把密码改简单问题立刻消失。原因就是宏值里的特殊字符被解析出了问题。这类错误在日志里不会说“密码格式有误”只会在vCenter侧记录认证失败。类似的坑还包括用户名里的被错误转义。建议监控账号密码一律用字母加数字规避这个坑。5.3 场景三vCenter 7.0的vCLS虚拟机刷屏Zabbix的VMware模板会自动发现集群里的所有虚拟机vCenter 7.0每个启用了vSphere功能集群会有几台名称以vCLS开头的虚拟机用来跑集群服务。这些虚拟机会被Zabbix当作普通虚拟机发现出来导致监控项列表里多出一堆看似无意义的条目。处理方式是在模板的虚拟机发现规则里配置过滤器将名称匹配vCLS.*的虚拟机排除。Zabbix 6.0的VMware模板支持通过泛型宏来设置排除规则具体的宏名和过滤器条件可以在模板的发现规则里查看。我当时是在模板里改了过滤器匹配模式填^(?!vCLS).*$让发现规则只采集不以vCLS开头的主机。改完模板后需要等下一个发现周期生效或者手动执行一次发现。5.4 场景四多vCenter环境下同名虚拟机数据混乱后来我管理第二个vCenter时发现两个数据中心里存在同名虚拟机导致Zabbix里监控项名称重复图表数据串了。排查到最后问题出在模板的监控项命名上。发现规则生成监控项时用的是虚拟机名称一旦两个vCenter的虚拟机重名就分不清谁是谁。解决方案就是给每套vCenter设置不同的{$VMWARE.NAME}宏并在模板的监控项名称或发现规则中带上这个宏作为前缀。这也印证了前面为什么要劝你设置{$VMWARE.NAME}。5.5 场景五缓存不足导致采集不稳定虚拟机数量过了几百台之后日志里开始出现VMware cache size too small的提示随后数据更新开始不稳定有些宿主机监控项会间歇性无数据。原因很好理解Zabbix把从vCenter拉回来的数据先放在内存缓存里默认8M不够用了。我把VMwareCacheSize调到64M之后问题消失。如果你的虚拟机总量上千台建议直接给128M以上同时留意Zabbix Server所在物理内存是否充足。6. 告警规则设计与后续优化数据上来了监控的最终目的是告警。Zabbix自带的VMware模板有部分触发器但默认阈值不一定适合你的业务。我给你一套经过实践检验的基础告警建议。6.1 适合大多数环境的告警阈值监控项建议阈值说明vmware.hv.cpu.usage85%警告95%严重宿主机CPU使用率vmware.hv.memory.used90%警告95%严重宿主机内存使用率vmware.vm.cpu.ready10%警告20%严重CPU就绪时间高说明资源竞争严重vmware.datastore.size80%警告90%严重数据存储空间使用率vmware.hv.power.state非正常状态告警宿主机掉线或维护状态时通知CPU Ready这个指标我要多说一句。很多人只看虚拟机内部的CPU使用率忽略了宿主机的资源竞争。当宿主机CPU资源紧张时虚拟机内部CPU使用率不见得高但CPU Ready会明显上涨。这个指标在Zabbix的VMware模板里有单独的监控项建议重点盯。6.2 扩展思路利用SNMP Trap接收vCenter告警事件性能监控搞定之后如果你还想进一步把vCenter里的告警事件比如HA切换、存储掉线也汇总到Zabbix可以走SNMP Trap通道。大致流程是在vCenter 7.0的告警设置里配置SNMP陷阱接收器指向Zabbix Server的162端口Zabbix侧安装并配置snmptrapd启用StartSNMPTrapper1然后用SNMP trap类型的监控项接收。按我的经验这个方案的投入产出比不如性能监控。vCenter的SNMP Trap内容格式比较固定但字段解析和自定义正则都需要花时间维护。如果你对vCenter告警没有强制统一归档的要求建议先把性能监控跑扎实事件告警后续按需再做。6.3 版本更新与兼容性建议Zabbix 6.0是LTS版本官方对vCenter 7.0是支持的。但如果你用的是6.0.0、6.0.1这些早期补丁版本遇到一些vCenter 7.0更新版本后的API兼容问题建议升级到6.0.x最新的补丁版本。社区里反馈过一些VMware Collector内存增长的问题也是在后来的补丁里修复的。多vCenter环境建议每套vCenter单独创建一个VMware类型主机并设置不同的{$VMWARE.NAME}宏。这样监控项清晰、告警规则可以按环境差异化配置后续排查问题也方便。最后再分享一点个人体会这套监控折腾完之后最值钱的不是那个“vCenter监控面板”而是你在搭的过程中把Zabbix的VMware采集机制摸透了——以后遇到什么“主机已添加但没数据”的问题几分钟就能定位到StartVMwareCollectors或宏配置上。如果你也刚准备配别急着搜各种“一键脚本”花半小时把原理和参数搞清楚比什么脚本都管用。
返回列表