周美佳, 赵 科
(中远海运科技股份有限公司, 上海 200135)
随着中远海运集团及其下属公司业务的快速发展,以及IaaS(Infrastructure-as-a-Service)基础架构层服务器虚拟化技术的应用,云架构模式逐渐代替了传统的单机运行模式,虚拟化产品开始应用于基础架构中。随着虚拟化产品Vsphere Client的不断升级,云数据中心内纳管Vsphere Client也同步升级,目前云数据中心内在用的监控系统APM因商业产品的许可证问题,无法添加新的组件功能,无法实现二次开发,进而无法实现对Vsphere Client6及以上版本产品的监控,需将对虚拟化云的监控从传统监控平台APM中分离出来,这样既能节省原监控系统的商业许可证,又能满足对虚拟化资源的监控需求。
如何以经济有效、自主可控的方式实现对高版本Vsphere Client的监控,从而获得Vsphere Client中纳管资源的运行情况,是急需解决的问题,对新的监控系统的功能提出了挑战。
Zabbix作为业界广泛使用的企业级监控工具,具有开箱即用、灵活可扩展、分布式监控、高可用和安全保障等诸多优势。Zabbix提供了自定义监控项和远程运行自定义脚本的功能,通过编写通用脚本和简单的Web配置,可灵活展示,满足个性化监控和自动化运维需求。基于以上优点,选择Zabbix作为平台的核心组件。自Zabbix2.2.0版本开始支持对VMware的监控,支持VMware vCenter和vSphere的最低版本为4.1,目前监控对象的版本在6.5以上,可通过Zabbix 4.4.7实现有效监控。本文基于开源的监控系统Zabbix,并配合自定义性能计数器,构建自动化监控系统,高效地完成对各虚拟化云的监控,同时提供事件预警、通知和集中展示功能,达到自主运维和自主可控的目的,较好地解决现有监控系统无法监控高版本虚拟化资源的问题,为后续扩大监控系统监控范围提供参考。
在日常运维工作中,对虚拟化VMware运维的关注主要集中在VMware vCenter 中VMware ESX主机的可用性、CPU(Central Processing Unit)利用率、内存利用率和所属存储使用率等方面。另外,VMWARE ESX主机上虚拟机的运行情况也可通过对VMWARE ESX主机进行监控获取。通过对服务端Zabbix 4.4.7进行配置和自定义性能计数器,实现对以上监控需求的邮件自动化告警。
Zabbix自动化监控系统采用3层C/S架构,分为服务端、被监控客户端和数据展示端等3部分,其中:服务端采用Zabbix server 4.4.7和Mysql8.0数据库;客户端一般安装Zabbix agent;数据展示端为Zabbix自带Web界面,可对日常监控数据进行查询和配置监控设备。服务端主要负责对客户端采集的数据进行处理和逻辑判断,按监控触发器的规则生成对应的告警事件,进行故障通知;所有配置信息和Zabbix采集到的数据都存储在Mysql数据库中,便于对日志和数据进行回溯查询。被监控客户端通常安装Zabbix agent,通过Zabbix agent、SOAP和SNMP等对被监控点的性能和可用性进行监控,并将收集的数据发送给Zabbix server。自动监控系统架构见图1。
图1 自动监控系统架构
Zabbix 4.4.7中默认提供3个模板,可直接用来监控VMware vCenter、ESX hypervisor和虚拟机。监控虚拟机分以下2个步骤完成:
1) Zabbix通过VMware collector进程获取虚拟机数据。这些进程通过SOAP协议,从VMware Web SDK服务中获取必要的信息,收集的数据分为VMware配置数据和VMware性能数据2种,目前VMware性能统计信息有数据存储、网络接口、磁盘设备统计信息和自定义性能计数器项,Zabbix server对这些数据进行预处理并存储到Zabbix server共享内存中。
2) Zabbix pollers通过Zabbix简单检查VMware监控项,检索这些数据。
Zabbix监控工作流程图见图2。
图2 Zabbix监控工作流程图
3.2.1 Zabbix server端配置
在一般情况下,Zabbix 4.4.7不满足对虚拟机的监控需求,在进行虚拟化平台监控时,Zabbix在编译时需加上—with-libxml2和—with-libcurl,并在Zabbix server的配置文件中开启StartVMwareCollectors、VMwareFrequency、VMwarePerfFrequency、VMwareCacheSize和VMwareTimeout。配置完成之后,重启zabbix_server服务,显示支持对虚拟机的监控。图3为完成Zabbix server端配置之后的日志。
图3 完成Zabbix server端配置之后的日志
3.2.2 以自定义性能计数器实现ESX各监控项监控
Zabbix内置监控VMware的3个模板分别是“Template VM VMware”“Template VM VMware Guest”和“Template VM VMware Hypervisor”。Template VM VMware用于对VCenter进行配置,通过配置的VMware Web SDK信息获取信息;Template VM VMware Guest和Template VM VMware Hypervisor模板通过自动发现使用,通常设置为自动链接到主机,主要用来自动发现虚拟机和ESXI服务器。添加vcenter 地址,采用宏变量方式配置VC控制台的{PASSWORD}、{URL}和{USERNAME}信息,链接到Template VM VMware模板,配置之后成功发现VC、虚拟机和ESXI服务器。
通过Zabbix实现对VMware虚拟化资源的监控,具体如下。
1) VMware ESX主机可用性。
此部分需使用Zabbix ICMP模板。Zabbix服务器默认未安装fping服务,需额外安装fping服务并修改配置文件,添加参数“FpingLocation=/usr/local/fping/sbin/fping”,实现主机的fping功能。在Zabbix web主页上添加主机ping,见图4。
图4 Zabbix Web主页上添加主机ping截图
2) 自定义实现VMWARE ESX主机CPU利用率。
通过创建新的item name “hypervisor_cpu_used_percent”定义ESX主机CPU利用率,方便进行自定义计算,item type设计为计算类型Calculated,key使用自定义key vmware.hv.cpu[usedpercent],通过获取的CPU frequency、CPU cores和CPU usage自定义性能计数器“hypervisor_cpu_used_percent”,实现对主机CPU的计算,计算公式为
100·last(“VMware.hv.cpu.usage[{$URL},{HOST.HOST}]”)/(last(“VMware.hv.hw.cpu.freq[{$URL},{HOST.HOST}]”)·last(“VMware.hv.hw.cpu.num[{$URL},{HOST.HOST}]”))……
(1)
3) 自定义实现VMWARE ESX主机内存利用率。
通过创建新的item name “hypervisor_memory_used_percent”定义ESX主机内存利用率,方便进行自定义计算,item type设计为计算类型Calculated,key使用自定义key vmware.hv.memory[usedpercent],通过获取的Total memory和Used memory自定义性能计数器“hypervisor_memory_used_percent”,实现对主机内存的计算,计算公式为
100·last(“VMware.hv.memory.used[{$URL},{HOST.HOST}]”)/last(“VMware.hv.hw.memory[{$URL},{HOST.HOST}]”)
(2)
4) 自定义实现VMWARE ESX所属存储使用率。
(1) 自动发现主机关联的所有存储空间,发现规则为“Datastore discovery”,使用内置key “vmware.hv.datastore.discovery[{$URL},{HOST.HOST}]”,item type为simple check。
(2) 在自动发现所有存储的基础上,根据日常监控运维经验,经常关注存储剩余空间实际大小,方便根据存储剩余空间实际大小定义触发器。因此,自定义item prototype name “Free space on datastore {#DATASTORE} (sizeG)”,方便以后根据存储剩余空间实际大小定义触发器。key定义为
vmware.hv.datastore.size[{$URL},{HOST.HOST},{#DATASTORE},free]
(3)
3.2.3 创建各监控项的触发器
1) 定义VMware ESX主机可用性触发器。
新建trigger name “Unavailable by ICMP ping”,自定义expression,当主机无法ping通时定义为高危High,即
{Template VM VMware Hypervisor:icmpping.max(#3)}=0
(4)
2) 定义VMWARE ESX主机CPU利用率触发器。
新建trigger name “esx cpu usage”,自定义expression,当CPU利用率大于90%时定义为高危High,即
{Template VM VMware Hypervisor:vmware.hv.cpu[usedpercent].last()}≥90……
(5)
3) 定义VMWARE ESX主机内存利用率触发器。
新建trigger name “esx memory usage”,自定义expression,当内存利用率大于90%时定义为高危High,即
{Template VM VMware Hypervisor:vmware.hv.memory[usedpercent].last()}≥90
(6)
4) 定义VMWARE ESX 所属存储使用率触发器。
新建trigger name “datastore{#DATASTORE} 可用空间小于200G”,自定义expression,当剩余存储空间小于200G时定义为高危High,即
{Template VM VMware Hypervisor:vmware.hv.datastore.size[{$URL},{HOST.HOST},{#DATASTORE},free].last()}≤200 000 000 000
(7)
3.2.4 配置告警动作
对于运维人员来说,第一时间得到潜在或发生的故障信息,及时发现并排除安全隐患至关重要,Zabbix 报警通过定义和动作来完成:通过比较监控实时数值与预设的阈值判断报警条件是否成立,通过动作设定执行该报警如何发送、发送给谁和何时发送。报警事件亦有不同级别,可定义为消息、警告、错误和严重错误等,可设置为只有出现某类级别时才引发报警。在通知运维人员的方式方面,通过配置SMTP邮件媒介告警,当收集到的数据在阈值范围内时,触发告警动作,通过action邮件告警的方式将告警信息发送给管理员。邮件内容包括主机名、IP地址、问题名称和报警时间等,使运维人员能第一时间进行主动干预,解决问题。
1) 配置告警一:Unavailable by ICMP ping告警。
设置以下告警信息:
(1) Problem started at {EVENT.TIME} on {EVENT.DATE};
(2) Problem name,即{EVENT.NAME};
(3) Host,即{HOST.NAME};
(4) Severity,即{EVENT.SEVERITY};
(5) Original problem ID,即{EVENT.ID};
(6) {TRIGGER.URL}。
当ESX主机无法ping通时,自动发起邮件告警,发送给管理员。
2) 配置告警二:esx cpu memory high monitor up to 90%告警。
设置以下告警信息:
(1) 告警主机{HOST.NAME};
(2) 告警地址{HOST.IP};
(3) 监控项目{ITEM.NAME};
(4) 监控取{ITEM.LASTVALUE};
(5) 告警等级{TRIGGER.SEVERITY};
(6) 当前状态{TRIGGER.STATUS};
(7) 告警信息{TRIGGER.NAME};
(8) 告警时间{EVENT.DATE} - {EVENT.TIME};
(9) 事件ID{EVENT.ID}。
当ESX主机CPU或内存使用率超过90%时,自动发起邮件告警,发送给管理员。
3) 配置告警三:DATASTORE 剩余空间小于200G告警。
设置以下告警信息:
(1) 告警主机{HOST.NAME};
(2) 告警地址{HOST.IP};
(3) 监控项目{ITEM.NAME};
(4) 监控取值{ITEM.LASTVALUE};
(5) 告警等级:{TRIGGER.SEVERITY};
(6) 当前状态{TRIGGER.STATUS};
(7) 告警信息{TRIGGER.NAME};
(8) 告警时间{EVENT.DATE} - {EVENT.TIME};
(9) 事件ID{EVENT.ID}。
当ESX存储空间小于200G时,自动发起邮件告警,发送给管理员。
1) 当ESX主机无法ping通时,自动发起邮件告警,发送给管理员。管理员收到的内存告警邮件信息见图5。
图5 管理员收到的内存告警邮件信息
2) ESX主机CPU或内存使用率超过90%时,自动发起邮件告警,发送给管理员。管理员收到的内存告警邮件信息见图6。
图6 管理员收到的CPU告警邮件信息
3) 当ESX存储空间小于200G时,自动发起邮件告警,发送给管理员。管理员收到的存储告警邮件信息见图7。
图7 管理员收到的存储告警邮件信息
虚拟化架构是未来IT服务发展方向,在保障重要系统业务连续性运行、提升用户体验等方面具有积极作用,虚拟化架构的业务连续性依赖于强大的监控系统,将运维故障终止于发生初期是监控系统的目标。本文基于Zabbix的自动化监控系统实现了对虚拟化平台的监控,该系统已投产并稳定运行,极大地减轻了运维压力,提升了整体运维效率。运维人员日常只需查收相关的告警邮件,即可了解资源异常使用情况,做到提前干预,尽早处理,提升系统的可用性。当然,Zabbix的应用远不止上述监控功能,此外还包括操作系统日志监控、数据库监控、中间件监控、Web应用监控和机房环境监控等,同时可配合Grafana提供更优质的可视化用户体验。未来将继续开发Zabbix的更多应用场景,并整合各类运维事件,提供低成本、高效益的智能化统一监控运维平台。