暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

运维小技能-Zabbix监控VMware虚拟化平台

481

个人认为掌握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 VM
    StartVMwareCollectors=10
    VMwareFrequency=60
    VMwarePerfFrequency=60
    VMwareCacheSize=200M
    VMwareTimeout=10


    1、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


            文章转载自数据库运维之道,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论