ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

VCF许可证管理简化实战:从人工台账到监控数据源

VCF许可证管理简化实战:从人工台账到监控数据源 先把话说在前面VCF 这三个字母在不同的圈子里意思差了十万八千里。做生信的朋友看到“VCF”想到的是 Variant Call Format讨论的是怎么把单人 VCF 合并成家系 VCF做运维的朋友看到“VCF”想到的则是 VMware Cloud Foundation。这篇文章只聊后者——VCF 运维集群和独立部署环境下的许可证管理而且是从监控的视角来聊。我为什么对这件事特别上心因为许可证管理在运维体系里属于那种“平时没人看看的时候必然出事”的科目。你说它难吗单个组件查许可证非常简单打开 vCenter看一眼许可属性完事。但你要是管着几套 VCF 集群、外加一堆不在统一纳管范围内的独立部署环境就会发现事情完全不一样每个产品线的许可口径不同vSphere 按 CPU 数算vSAN 按容量算NSX 按主机或 vCPU 算vCenter 又按实例算独立部署环境没有 vCenter你只能登到 ESXi 上挨个看。到了做容量规划或者审计对账那天几套报表摆在一起数字对不上责任分不清最后往往变成运维背锅。所以我后来做了一件事把许可证管理从“人工台账”升级成“监控数据源”。环境里的 vSphere、vSAN、NSX、vCenter 许可证使用情况全部汇到一个监控面板统一口径、定时采集、阈值告警、趋势预测。这篇文章就记录一下我这次简化过程的完整思路和实操步骤包括踩过的坑、绕过的弯希望能给同样被 VCF 许可证搞到头疼的运维同行一点参考。1. 先搞清楚监控视角下到底要盯哪些许可证1.1 VCF 许可证管的不只是 vSphere很多第一次接触 VCF 的运维兄弟会有一个惯性思维许可证vSphere 的授权序列号。实际上 VCF 运维集群的许可体系要复杂得多至少横跨五个层面。vSphere 层面管的是虚拟化底座的授权通常按物理 CPU 或套接字计费。ESXi 主机上有几颗物理 CPU就要占几个许可单元。这个层面的监控指标包括授权总量、已用量、剩余量、许可证状态已授权/评估模式/过期。vCenter 层面是另一类许可。它通常不是按 CPU 数算而是按实例或者纳管主机数算。也就是说你每新增一个 vCenter Server或者 vCenter 需要纳管的主机数量超过授权范围都会触发许可证问题。这个维度的指标在监控平台里经常被忽略因为大家默认 vCenter“装了就是有许可”。vSAN 层面的许可要特别留意因为它按容量计费单位一般是 TiB。vSAN 的授权容量不等于集群里所有磁盘容量的总和而是你在商务采购时明确买下的容量池。监控时不能只盯着存储使用率还要盯“授权容量余量”。我就见过一个环境vSAN 实际存储用了 90 TB授权容量买了 100 TB团队一直以为还有充足余量结果一扩容就是报警因为那 10 TB 余量根本扛不住备份和日志的瞬时增长。NSX 层面的许可按主机或 vCPU 授权涉及网络虚拟化、分布式防火墙和负载均衡功能。这一层监控的难点在于你不但要盯着许可证数量还要关注安全策略下发是否会因为许可不足被拦截。在实际监控里NSX 出问题往往不是“许可证没买”而是“分布式防火墙启用的主机数超过了授权主机数”这种问题在界面上不给你弹提示只能从策略下发失败的日志里反推。Aria 或 vRealize 套件的许可是按 OSI 或者 CPU 容量计算的主要用于监控和分析本身。很多团队把整个 VCF 环境纳入 Aria Operations 监控但忽略了 Aria 自身的许可证容量。一旦纳管对象数量超过许可上限监控数据采集会静默停止后续所有告警全部失效。这属于“监控的监控”最容易被人遗忘。所以在设计许可证监控方案的最开始不要先想“我要用什么工具”而是先把环境里涉及的产品线清单列全。一个 VCF 域可能包括管理域和多个工作负载域每个域内的 vCenter、vSAN、NSX 都有自己的独立授权跨域汇总时如果不分产品线直接相加会出现严重的口径偏差。1.2 运维集群与独立部署环境为什么不能共用一套报表VCF 运维集群和独立部署环境的区别不只在规模更在数据获取方式完全不一样。运维集群一般都有 SDDC Manager 和 vCenter 统一纳管。我的工作环境里有三套 VCF 运维集群每套都有自己的管理组件和统一 API。许可证数据可以从 SDDC Manager 总览、vCenter 的许可证管理模块或者各个组件的 REST API 拉取算是标准路径权限模型也比较清晰。但独立部署环境就完全是另一回事。这些环境通常是一台或者几台 ESXi 主机没有 vCenter没有 SDDC Manager甚至网络都比较封闭。要拿到许可证状态最直接的方式是登录 ESXi 的管理网络读取 hostd 服务和 LicenseManager 的数据。你可能要开 SSH、用本地账号、绕过证书校验才能把这台孤立主机的许可证拖回来。这种差异带来的直接后果是如果把两类环境放在同一套采集任务里很容易互相拖累。运维集群的采集任务要求 API 可达、证书可验、账号在 AD 域内独立部署环境的采集任务要求 SSH 可达、防火墙放行、本地账号有权限。同一套调度器、同一个网络策略解决不了两个场景。拿运维集群的采集任务去连独立主机主机那边没有 vCenter 的合法证书任务直接失败拿独立环境的安全标准去约束集群采集又会把运维集群的自动化能力废掉一大半。我的做法是把监控平台里的许可证数据源拆成两个采集域一个面向 VCF 运维集群使用 vCenter 只读账号和 API 采集另一个面向独立部署环境使用 ESXi 本地只读账号和逐台主机采集。这两个域的指标虽然最终会合并在同一个大屏上但数据链路、采集周期、告警规则必须分开管理。表面看起来多了一个采集域运维负担增加了一点但实际省掉了大量排查“数据为什么对不上”的时间。1.3 监控场景下的目标一个面板覆盖全量许可状态简化许可证管理最终要达到的效果不是“多个页面能查到许可证”而是“一个面板直接回答三个问题”。第一个问题现在用了多少还剩多少。这个最容易理解就是把各产品的授权总量、已用数量、剩余数量放到同一张表上。需要注意的是这里的数字不能是人工填上去的最好是从 API 或者命令行自动取数后落库否则每次刷新都要人工同步失去了监控的意义。第二个问题哪些组件的许可证即将过期或已经快不够用。这需要给许可证使用率设置合理的告警阈值。我习惯把告警分成两级使用率到 80% 时提示需要规划采购到 95% 时直接报警进入风险控制流程。许可证到期时间也要纳入监控提前 30 天预警。第三个问题新增资源时会不会因为许可证不足导致部署失败。这个最实用也最容易被监控工具忽略。比如运维集群的 vSAN 授权容量只剩 5 TiB此时如果有一个新工作负载域要部署要求 vSAN 容量池至少 8 TiB那这个部署根本做不了。如果监控面板能直接把“许可证剩余容量”和“计划部署资源需求”做比对很多上线前的问题可以在规划阶段就暴露出来而不是等到 vCenter 报错才发现。我这里有一个很直观的例子。某个部门的独立部署环境接了 6 台 ESXi 主机vSphere 授权是每 CPU 计算的。前 5 台都是 2 路 CPU第六台变成了 4 路 CPU结果看起来主机数量没增加多少许可证消耗却多了 2 个单元。这种情况如果只看主机数量永远发现不了问题把 CPU 数量和许可证已用量放到同一个面板上一眼就看出差异。2. 简化许可证管理的整体设计与方案选型2.1 三种常见方案怎么选我在做这个项目之前把市面上几种常用思路都列了一遍最终选出了一套适合自己的组合。三种方案分别是纯手工台账、商业监控插件、自建 API 采集。纯手工台账是最常见的起点。把各环境的许可序列号、授权数量、过期时间填进 Excel每个月手动更新一次。优点是零成本、零依赖缺点也很明显信息滞后、人工录入容易错、无法回答实时问题。在我这种多环境叠加的场景下手工台账根本撑不住。商业监控插件比如 VMware Aria Operations 自带的许可证监控视图或者第三方厂商的插件体验相对完整。它能直接对接 vCenter自动采集 vSphere、vSAN、NSX 的许可证数据界面也好看。但有两个问题一是插件覆盖的是“纳入它管理范围的资源”独立部署环境没有 vCenter照样采集不到二是插件自身的许可证也是要监控的对象万一 Aria 套件的许可证用满了你的监控面板先垮了。所以插件方案适合单一集群的小规模场景不适合复杂多域环境。自建 API 采集是最终我选择的路线。通过 vCenter、SDDC Manager、NSX Manager、ESXi 主机各自的 API 或命令行接口把许可证数据抓取到统一的时序数据库中再接入现有的监控平台展示。好处是能完全覆盖两类环境数据口径自己控制告警规则自由定制。坏处是前期要写脚本、调接口、处理各种异常对 API 的熟悉程度要求高。我并不是说自建一定优于商业插件而是要从环境现状倒推方案。如果你的环境就是一套 VCF没有独立部署环境买现成插件也没问题。但如果你和我一样既要管运维集群又要管一堆散落的独立主机插件覆盖不全自建采集就成了绕不开的路。2.2 为什么我给独立部署环境单独做了一条采集链路独立部署环境的许可证管理最让人头疼的不是技术而是“没人说得清它有多少台”。这些环境可能是测试资源池、灾备演练用的临时主机、或者某个部门自己搭的单节点跑批环境。它们不在 VCF 集群的统一纳管范围里甚至可能不在同一个运维团队的正规流程里。如果只靠 vCenter API 采集独立部署环境的数据会完全缺失。因为它们没有 vCentervSphere 许可证信息存在每台 ESXi 的本地配置中。更麻烦的是这些机器的网络隔离策略各不相同有的开放 SSH 管理口有的只放行 https 端口 443有的连出网都被白名单限制。我的独立环境采集链路其实就是三个环节ESXi 主机的可编程接口、采集代理、监控平台。采集代理每 24 小时跑一轮通过 SSH 或者 hostd 管理接口读取许可证信息把结果转换成监控指标推给时序数据库。为了让这些独立主机不因为证书问题被扣在采集器外面我在采集脚本里专门做了“允许自签名证书但校验主机指纹”的逻辑既解决了安全投诉又保证了通路顺畅。这个链路一开始也有人建议直接并入运维集群的采集任务。我没有采纳因为两个环境的采集频率和故障处理机制完全不同。运维集群的许可证数据基本不会突然消失vCenter 一直在采集任务就算失败下一次重试就行独立部署环境的主机可能因为维护、断电、网络调整长期失联它的监控告警不能套用集群的标准。单独链路的好处是你可以给独立环境设置更宽松的“数据新鲜度”阈值比如允许 48 小时不更新而不是集群那样 2 小时没数据就告警。2.3 监控面板的层级怎么设计监控面板的设计要能“一眼定位问题”不要让使用者在一堆图表里猜。我的面板分成了四个区域。第一块是总览区。用几个大数字展示所有环境的“总授权 CPU 数”“总已用 CPU 数”“vSAN 总授权容量”“vSAN 剩余容量”“NSX 授权主机数”“NSX 已使用主机数”旁边放一个许可证健康度得分。这块的作用是给领导和值班同事快速看状态不需要懂任何产品细节。第二块是运维集群区。列出每个 VCF 域的许可证明细包括管理域和工作负载域分开显示。每一行显示 vSphere、vSAN、NSX、vCenter 的用量情况状态为“正常”“预警”“危险”。点击每一行可以下钻到对应域的具体主机查看是哪台主机占了许可。第三块是独立部署环境区。按主机维度列出所有独立 ESXi 的许可证状态因为独立环境经常是“一台主机一个授权单元”用主机维度展示最直观。这里我把重点放在“剩余授权单元”上因为独立环境采购许可往往是按一定数量批量买散落的主机只要超过授权总量就得立刻报警。第四块是趋势区。展示许可证使用量的时间序列曲线。vSAN 容量趋势是重点因为它是连续型指标可以预测什么时候耗尽CPU 使用趋势次之NSX 主机数趋势属于阶梯型变化需要在每次阶梯跳变时做个说明这样可以判断是正常扩容还是误授权。面板设计的时候有一个很容易犯的错误把所有指标堆在一起结果每一格都看不清。我的建议是一个面板不超过 12 个区块每个区块只回答一个问题。宁可多做几个标签页不要让使用者面对满屏数字找重点。3. 核心实操打通 VCF 运维集群与独立环境的许可证数据采集3.1 准备账号、权限和 API 端点动手之前先把账号准备齐否则后面每走一步都会被权限卡住。对 VCF 运维集群我为监控专门创建了一个只读账号角色绑定为 vCenter 全局的只读权限。注意不要直接使用域管理员或者 vCenter 管理员账号来做采集一方面安全不合规另一方面管理员账号触发的操作日志会污染审计记录。只读账号在 vCenter 的全局权限里勾选“只读”对 SDDC Manager 就分配“View”角色能读域名列表和许可证摘要就够了。对独立部署环境我用 ESXi 主机本地账号角色只要“只读”和“System.View”需要允许 SSH 登录。以前很多人建议直接用 root 账号采集许可证为了省事。但 root 每次登录都会在 hostd 日志里留下痕迹而且 root 账号一旦被劫持整个主机都危险。所以即使是独立环境我也建议单独建一个svc-lic-monitor账号只给命令执行和读取的权限。API 端点方面运维集群常用的有vCenter APIhttps://vCenterFQDN/api和https://vCenterFQDN/sdk后者是 SOAP 接口适合 pyVmomi 脚本调用。SDDC Manager APIhttps://sddcManagerFQDN/v1/domains可以拿到域列表和各组件版本信息。NSX Manager APIhttps://nsxManagerFQDN/api/v1/licenses用于获取 NSX 许可证信息。vSAN 相关数据一般走 vCenter 的 vSAN 健康检查 API或者直接查 vSAN 数据存储容量。独立部署环境的端点就是每台 ESXi 的 443 端口和 SSH 22 端口。通过 https 可以直接调用 hostd 的 REST API路径一般是https://ESXiFQDN/folder或https://ESXiFQDN/host不过 VMware 的 ESXi 早期 API 还是 SOAP 风格更稳。这些端点有一个共同特点证书都是自签名的如果脚本里不处理 SSL 证书校验第一个请求就会报错。我后面有个章节专门讲怎么安全地绕过证书问题这里先记住一个原则跳过校验可以但不能不校验主机指纹否则中间人攻击毫无防御。3.2 抓取 vSphere 许可证以及 vSAN 容量消耗的核心代码采集 vSphere 许可证最常用的库是 pyVmomi。下面这段代码可以快速把 vCenter 里的授权列表拉出来我在 VCF 运维集群上实测过稳定。import ssl import urllib3 from pyVmomi import vim from pyVim.connect import SmartConnect, Disconnect # 关闭证书告警生产环境建议使用 CA 证书 urllib3.disable_warnings() ssl_context ssl._create_unverified_context() si SmartConnect( hostvcsa01.example.local, usersvc-lic-monitorexample.local, pwdYourPassword, port443, sslContextssl_context ) try: lic_manager si.content.licenseManager for lic in lic_manager.licenses: print( f名称: {lic.name}\n fKey: {lic.licenseKey}\n f总量: {lic.total}\n f已用: {lic.used}\n f状态: {lic.state}\n ) finally: Disconnect(si)这里有个细节lic.total和lic.used的单位是 vSphere 许可单元对 vSphere Enterprise Plus 来说通常对应 CPU 或者套接字。读取出来的数值如果是 0不一定代表没有限量可能是无限许可模式。比如某些订阅制的许可类型total 可能是 -1 或者 0这时你不要在监控里把它当成“已用满”否则会产生大量误报告警。对于 vSAN 容量我建议直接读取 vSAN 数据存储的容量指标然后结合 vSAN 许可证授权容量来计算剩余量。vSAN 的授权容量在 vCenter 里可以通过 vSAN Cluster 的配置信息拿到但更常见的做法是先把 vSAN 数据存储的Capacity和FreeSpace拉出来再用商务合同的授权容量减去已用容量。from pyVmomi import vim content si.RetrieveContent() container content.rootFolder view_type [vim.Datastore] container_view content.viewManager.CreateContainerView( container, view_type, True ) for ds in container_view.view: if ds.summary.type vsan: total_gb ds.summary.capacity / 1024**3 free_gb ds.summary.freeSpace / 1024**3 used_gb total_gb - free_gb print(fvSAN存储: {ds.name}) print(f总容量: {total_gb:.2f} GB) print(f已用容量: {used_gb:.2f} GB) print(f剩余容量: {free_gb:.2f} GB)注意这个数据是“实际物理容量”不是“授权容量”。要判断许可余量必须把商务合同的授权容量写进配置表。比如你买了 50 TiB 的 vSAN 授权数据存储总容量 80 TiB已用 45 TiB那许可剩余是 5 TiB而不是 35 TiB。这个逻辑搞清楚告警阈值才准确。NSX 的许可证采集相对简单调用 NSX Manager 的 REST API 即可curl -k -u svc-lic-monitor:YourPassword \ https://nsx-manager.example.local/api/v1/licenses返回的 JSON 里有license_key、description、product_version等字段核心信息是capacity和used。把这两个值抓下来就能算出 NSX 层的许可使用率。3.3 把数据写入监控平台脚本采集到的数据要落到统一的监控平台里。我这里以 Prometheus Grafana 为例因为这是最通用的开源组合而且 VCF 运维团队通常已经跑着 Prometheus。最简单的方式是让采集脚本直接以 Pushgateway 模式把指标推到 Prometheus再由 Grafana 画图。给每台 vCenter 和每台独立 ESXi 都打上环境标签和域标签这样 Grafana 里可以按环境维度切分。cat EOF | curl -X POST --data-binary - http://prometheus-pushgateway:9091/metrics/job/vcf_license # TYPE vsphere_license_used_total gauge vsphere_license_used_total{vcvcsa01,domainmanagement,productvsphere} 24 vsphere_license_used_total{vcvcsa01,domainworkload01,productvsphere} 16 vsan_license_capacity_tib{vcvcsa01,domainmanagement} 50 vsan_license_used_tib{vcvcsa01,domainmanagement} 45 nsx_license_used_hosts{managernsx01,domainmanagement} 42 EOF指标命名有三个原则命名里带单位、带环境标签、带产品标签。不要只写license_used因为一个面板上有 vSphere、vSAN、NSX、vCenter 好几种许可证不标产品一定会混。如果你用的是 Zabbix 或者 Aria Operations思路也一样。核心是把采集结果通过自定义项或自定义指标传入然后构建视图。Prometheus 这套的好处是 push 模式确实适合独立部署环境。独立主机不在同一个网络里主动等 Prometheus 来拉可能因为网络隔离拉不到反向由脚本推送到 Pushgateway只要跑脚本的这台机器和独立环境之间有网络通路数据就能汇总上来。3.4 设置告警和容量预测数据采上来就要发挥作用否则就是给监控平台攒了一堆没用的曲线。我的告警规则设置如下。vSphere 层许可使用率超过 80% 触发 Warning超过 95% 触发 Critical。这里的百分比是“授权总量 vs 已用总量”与主机的 CPU 使用率无关。很多初见这套面板的人会问“主机 CPU 才跑 20%怎么许可就 90% 了”因为许可使用量是物理 CPU 数量不是负载。vSAN 层剩余授权容量小于 10 TiB 时触发 Warning小于 5 TiB 时触发 Critical。这个阈值要结合你自己的审批周期设。如果采购一套 vSAN 许可流程要两个月那 10 TiB 预警都不够至少提前一个季度的用量才安全。我后来改成按“剩余可支撑月数”告警比固定容量告警更合理。NSX 层授权主机数和实际启用分布式防火墙的主机数不一致时立即告警。因为这个问题不会渐进恶化它是策略配置导致的可能昨天还好好的今天加了一台主机就超限。用差值匹配的方式能最快发现。独立部署环境层每台 ESXi 主机的许可证状态不是“licensed”时直接告警。独立环境的许可证变更经常是手工操作的一旦有人把许可证 key 输错或者删掉主机就变成评估模式虽然不影响当前运行但重启之后可能起不来虚拟化服务。容量预测我直接用 Prometheus 的线性回归函数predict_linear做 vSAN 容量消耗预测。比如predict_linear(vsan_license_used_tib{domainmanagement}[30d], 90*86400)这条查询的意思是基于过去 30 天的使用趋势预测未来 90 天 vSAN 授权容量会用到多少。如果预测值超过授权容量就自动生成一条 Ticket转给容量管理员。刚开始推这个预测时业务方半信半疑结果三个月后预测数字和实际值误差不到 8%后来这个指标就成了每周例会必看的数据。3.5 巡检报告和许可证清理监控面板能看实时状态但真正给领导汇报、给采购提供数据支撑的还是定期巡检报告。我写了个每周自动生成报告的脚本从 Prometheus 里把过去 7 天的许可数据拉出来生成 PDF 和 Excel 两个版本。Excel 给采购看里面有各产品线的详细授权列表和使用趋势PDF 给领导看里面只有摘要图和风险列表。这个报告能帮你顺带发现一个常见问题僵尸许可证。所谓僵尸许可证就是环境中已经不再使用但依然占用授权容量的许可记录。比如某台 ESXi 主机已经退役但 vCenter 的许可证列表里还残留着给这台主机的授权记录导致“已用总量”虚高。清理僵尸许可证需要小心。不要直接删掉 vCenter 里所有未关联的许可证因为有些可能是共享订阅服务的授权删除会影响其他主机。我的经验是先把报告里“used0”或者“关联主机数0”的许可证挑出来核对三天确认没有主机重新关联后再执行清理操作。Parent 完下次采集时这个许可证就从已用列表中消失面板上的使用率会立刻降低。这个过程虽然不难但非常容易出现误删最好在变更窗口内操作并保留备份。4. 我踩过的坑许可证监控的典型问题与排查4.1 数据口径对不上采集链路搭好之后第一次对账我就差点交不了差。vCenter 里显示 vSphere 许可证“已用 30”我脚本采集到的也是 30但商务合同里协议授权是 32采购说没超运维说超了两边吵了半天。后来发现原因在“已用”的计算方式vCenter 的许可证模块统计的是“所有关联此授权主机占用的许可单元”而商务合同里可能包含两个不同采购批次、不同起始日期的授权它们虽然是同一产品但在 vCenter 里被显示成两条记录一条 30 全用满一条 2 完全闲置。这种口径差异解决不了只能统一。我在监控平台里建了一个“授权清单表”把每张商务合同拆成许可记录并记录其在 vCenter 里的许可证 key。采集脚本读取 vCenter 的“使用量”后再和授权清单表做关联物料码、合同号、产品线一一对应。最终面板上的数字才和采购部门的台账对齐。4.2 调用 API 遇到限流有一次我把采集频率设成了每 5 分钟跑一次结果跑了半天vCenter 的 API 响应速度变慢部分任务开始超时。后来查日志发现vCenter 的 SOAP 接口对同一个客户端账号有连接数限制而且 pyVmomi 的连接建立和断开都很重短周期高频调用非常不友好。解决办法是把采集频率改到每 6 小时一次。许可证数据的时效性要求不高半天更新一次足够。如果你确实想更实时建议用 vCenter 的 REST API 而不是 SOAPREST 接口对轻量请求的支持更好连接开销小不会把 vCenter 的 session 打爆。还有一点采集脚本要妥善处理 session 复用。不要每次都新建连接脚本跑完后不要直接暴力关闭要优雅地调用Disconnect(si)。一旦连接没释放vCenter 的 session 列表会持续增长最终把 session 上限耗尽你的整个运维集群都可能登不上。4.3 告警风暴和误报告警规则第一次上线时我设了几条比较激进的阈值比如 vSphere 许可使用率超过 85% 就发 Critical。结果当天晚上就收到三十多条告警值班同事差点把手机摔了。原因并不复杂评估模式下 total 字段异常被脚本当成“用量无限大”算进使用率导致所有主机都显示 100%。这类误报的根因是我的脚本没有对异常态做过滤。后来我在采集脚本里加了一个判断如果许可证状态是“evaluation”或者“expired”直接标记为异常状态不参与使用率计算只有状态为“licensed”的记录才进入监控指标。这样真实的使用率曲线才恢复有效参考价值。另外每个环境的告警通知策略也要分开。运维集群的告警发给平台组独立部署环境的告警发给现场运维同事两者的处理时效和通知频率完全不同。我把通知冷却时间分别设成 1 小时和 8 小时避免同一个独立环境失联导致每小时重复轰炸。4.4 许可证过期但不影响现有业务许可证过期是监控里最容易引起误导的场景。ESXi 的许可证过期后虚拟化服务不会立刻停止已经运行的虚机继续跑主机也正常响应只有新的部署操作会被拦截。所以监控告警里如果只检测“主机是否在线”和“虚机负载”你根本发现不了许可证过期。我实际遇到过一次某独立环境的一台 ESXi 使用的许可证在凌晨过期由于那天没有新的虚机部署操作业务完全无感知。直到三天后有人要试虚拟机迁移才发现许可证状态已经变成 expired但是 vCenter 没纳管这台主机连告警都发不出来。从那以后我把许可证状态的监控和主机心跳完全剥离。许可证过期告警是独立的一条链不依赖主机是否在线。哪怕主机响应正常只要许可证状态不是 licensed也会触发告警。同时我还监控了“许可证剩余天数”这个指标用license_expire_timestamp - now()算出剩余天数小于 30 天就进入预警清单这样能在真正过期之前解决。5. 减少许可证管理摩擦的扩展玩法5.1 容量预测与采购联动许可证监控一旦跑起来最有价值的产出就是容量预测。vSAN 授权容量的消耗通常不是线性的它和业务增长、备份策略、虚拟机克隆频率直接相关。通过时序数据库保留至少 180 天的历史数据我可以清晰看到容量消耗的斜率变化。我用了一个最简单也最实用的方法把每月消耗量做成一个移动平均值然后用“当前剩余容量÷月均消耗量”估算剩余可用月数。当剩余月数少于采购周期时就触发采购建议。这比单纯看剩余容量更贴近实际。比如说你有 10 TiB 剩余看起来还好但月均消耗是 8 TiB那再过一个多月就会耗尽采购流程刚启动已经晚了。这个预测指标我放在了 Grafana 的顶部领导们每天都看。有一次采购部门拿着这个预测数据去谈判成功把许可到期时间和业务高峰错开省了一笔紧急采购溢价。运维数据能不能产生价值很多时候不是看技术多牛而是看你能不能找到一个业务方认同的度量指标。5.2 与 CMDB 联动自动标注许可证数据和配置管理数据库CMDB联动是一个进阶玩法。CMDB 里记录了每台主机的资产编号、所属部门、所在机房、维保状态把这些信息和许可证数据关联起来就可以实现自动化的责任标注。初始化的时候我把 CMDB 的主机清单导出来按主机名和序列号跟 ESXi 主机做关联。vSphere 许可证采集到的主机耗用会根据主机名自动匹配到 CMDB 的资产档案。这样在监控面板上你可以按部门或者按成本中心查看许可证消耗分布。财务部门很喜欢这个视图因为可以把 IT 成本分摊到每个业务部门。这个联动的实现不复杂就是给 Prometheus 的指标增加department、owner、asset_id标签。采集脚本读一次 CMDB 的 API把标签映射关系缓存到本地取数时自动附加。复杂度主要在上线初期要建立一套准确的映射表如果 CMDB 数据本身不准标签就会错联动反而变成负担。建议先挑一个业务域做试点把映射表核对清楚再推广。别一上来就全局展开否则光清洗脏数据就够你忙一个月。5.3 简化之后我得到的体感这一套许可证监控体系从设计到上线我大概花了三周。第一周梳理环境第二周写采集脚本和搭监控面板第三周调告警阈值和生成报告模板。上线之后变化是很明显的。之前每次做许可证对账我要同时开五个界面vCenter 的许可证页、vSAN 容量页、NSX Manager 的许可页、SDDC Manager 的总览页、还有一台台独立 ESXi 的 SSH 窗口。现在只需要打开一个 Grafana 面板所有数据都按统一口径摆在那里谁超没超、谁快过期、谁在消耗大量许可一目了然。对团队协作方式的改变也很大。以前遇到“能不能再开一台虚拟机”这种问题平台组的回复经常是“我去查一下许可”查完可能还要等采购确认。现在直接看面板剩余许可不足就直接告诉业务方当前余量和扩容预估时间沟通效率提升了一个台阶。当然这套方案也有局限。它完全依赖 API 数据准确如果 vCenter 自身的许可证模块数据出了问题采集结果也会跟着错。所以我不建议彻底删除人工巡检这条兜底路径只是把它的频率从“每个月一次”降到了“每季度一次”。许可证管理再简化也还是要留一双人眼做最终判断。我个人的体会是运维动手做这类“旁路管理”项目时先别想着把系统造得多复杂。能自动采集的就自动采集能用现有监控平台承接的就别另起炉灶。许可证管理本质上是一堆指标和阈值它不需要花哨的界面也不需要复杂的业务流程最关键是让数据流动起来。数据能稳定、准确地流动简化就是水到渠成的事。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进