个人认为掌握Zabbix开源监控软件使用是运维人员的一项必备技能。最近,公司帮助客户维护一套VMware虚拟化平台,而Zabbix系统成为首要运维工具。

下面我将介绍下如何运用Zabbix来监控VMware虚拟化平台。整体流程如下:
1、提供一台Zabbix监控虚拟机,并部署好Zabbix开源软件;
2、调整Zabbix配置文件,开启VMware相关监控参数;
3、创建监控对象进行VMware虚拟化平台对接配置;
4、创建企业微信机器人,并配置告警推送。
一、Zabbix监控系统部署
本文不介绍Zabbix的部署步骤,大家可以按照官方文档进行部署。
Zabbix版本:Zabbix 6.0.33
https://www.zabbix.com/cn/download
二、配置VMware相关监控参数
相关配置参数如下:
cat zabbix_server.conf |grep -v "^#"|grep VMStartVMwareCollectors=10VMwareFrequency=60VMwarePerfFrequency=60VMwareCacheSize=200MVMwareTimeout=101、StartVMwareCollectors 监控esxi的实例2、VMwareCacheSize 用于存储VMware数据的共享内存大小3、VMwareFrequency 从单个VMware服务收集数据之间的延迟(秒)。4、VMwarePerfFrequency从单个VMware服务检索性能计数器统计信息之间的延迟(秒)。4、VMwareTimeout 响应超时时间
三、VMware虚拟化平台对接配置
参考链接:
https://www.bilibili.com/read/cv11668253/
1、zabbix创建主机
注意:提前放行zabbix服务器到vmware平台的10050端口网络策略。

2、Zabbix配置模板
打开主机的模板选项卡,选择模板,直接搜索Template VM VMware这一个模板就可以了。
3、zabbix配置宏
主机和模板配置完毕之后,我们要在宏选项卡配置三个参数,用来告诉模板如何去目标esxi集群获取信息。
正确的参数应该为
{$VMWARE.URL}
{$VMWARE.PASSWORD}
{$VMWARE.USERNAME}
相关解释如下:
{$VMWARE.URL}:写esxi或者是vcenter主机的sdk地址,格式为 https://IP或域名/sdk。
{$VMWARE.PASSWORD}:vcenter上面的账号
{$VMWARE.USERNAME}:对应账户密码
填写完毕后,点击更新,回到主机列表,静待vcenter上的主机被发现。

四、配置企业微信群机器人告警
参考链接:
https://blog.csdn.net/weixin_44857388/article/details/134415430
https://blog.csdn.net/qq_29410215/article/details/139094596
1、消息模板配置

### 【Zabbix监控告警】IP:<font color="warning">{HOST.IP}</font>> 主机名称:**<font color="comment">{HOST.NAME}</font>**> 主机IP:<font color="comment">{HOST.IP}</font>> 事件名称:**<font color="warning">{EVENT.NAME}</font>**> 告警时间:<font color="comment">{EVENT.DATE}-{EVENT.TIME}</font>> 监控项:<font color="comment">{ITEM.NAME}</font>> 监控详情:<font color="comment">{ITEM.VALUE}</font>

2、企业微信对接脚本:
var Wechat = {token: null,to: null,message: null,parse_mode: null,sendMessage: function() {var params = {msgtype: "markdown",chat_id: Wechat.to,markdown: {content:Wechat.message},disable_web_page_preview: true,disable_notification: false},data,response,request = new CurlHttpRequest(),url = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=' + Wechat.token;if (Wechat.parse_mode !== null) {params['parse_mode'] = Wechat.parse_mode;}request.AddHeader('Content-Type: application/json');data = JSON.stringify(params);Remove replace() function if you want to see the exposed token in the log file.Zabbix.Log(4, '[Wechat Webhook] URL: ' + url.replace(Wechat.token, '<TOKEN>'));Zabbix.Log(4, '[Wechat Webhook] params: ' + data);response = request.Post(url, data);Zabbix.Log(4, '[Wechat Webhook] HTTP code: ' + request.Status());Zabbix.Log(4, '[Wechat Webhook] response: ' + response);try {response = JSON.parse(response);}catch (error) {response = null;Zabbix.Log(4, '[Wechat Webhook] response parse error');}if (request.Status() !== 200 || response.errcode !== 0 || response.errmsg !== 'ok') {if (typeof response.errmsg === 'string') {throw response.errmsg;}else {throw 'Unknown error. Check debug log for more information.'}}}}try {var params = JSON.parse(value);if (typeof params.Token === 'undefined') {throw 'Incorrect value is given for parameter "Token": parameter is missing';}Wechat.token = params.Token;if (['Markdown', 'HTML', 'MarkdownV2'].indexOf(params.ParseMode) !== -1) {Wechat.parse_mode = params.ParseMode;}Wechat.to = params.To;Wechat.message = params.Subject + '\n' + params.Message;Wechat.sendMessage();return 'OK';}catch (error) {Zabbix.Log(4, '[Wechat Webhook] notification failed: ' + error);throw 'Sending failed: ' + error + '.';}
五、部署问题处置
问题:界面显示 zabbix server is not running错误
(1)查看zabbix的运行日志
ls /var/log/zabbix/zabbix_server.log
(2)通过日志分析,发下出现内存溢出问题
__zbx_mem_realloc(): out of memory
(3)需要增加CacheSize的大小,找到/etc/zabbix/zabbix_server.conf参数文件,检查发现CacheSize参数没有设置,使用默认的值,将其调整为2048M大小。
(4)重启Zabbix Server服务,问题解决。
六、参考链接
https://www.cnblogs.com/lvxuede/p/18057580
https://www.cnblogs.com/kerrycode/p/13291509.html
https://blog.csdn.net/qq_35700085/article/details/127859483
https://blog.51cto.com/u_16213715/10717216
https://blog.51cto.com/u_16213661/10054791
https://blog.csdn.net/weixin_65562581/article/details/136024219




