zoukankan      html  css  js  c++  java
  • zabbix使用自动发现监控esxi的磁盘存储storage

    zabbix使用自动发现监控esxi的磁盘存储storage

    在任意一台可以访问vcenter的zabbix-agent服务器上添加exsi的磁盘监控模板即可

    创建模板过程:

    custom.esxi.discovery

    画图:

    注意要选择浮点型,否则可能不支持

    添加触发器:当磁盘使用率超过85%时触发报警

    自动发现的脚本:
    [root@wondershareID_web03:~]# cat /usr/local/zabbix_agents_3.2.0/scripts/zabbix_esxi_storage.py
    #!/usr/bin/python3
    #coding:utf-8
    #Author: ziming
    
    """
    只用于模拟开发功能测试
    """
    from pyVmomi import vim
    from pyVim.connect import SmartConnect, Disconnect, SmartConnectNoSSL
    import sys
    import atexit
    import argparse
    from optparse import OptionParser
    import json
    
    
    class Exsi(object):
    
        # 获取vcenter的相关参数
        def __init__(self, host = '192.168.254.69', port=443, user = 'zabbixmonitor', password='zabbixmonitor'):
            self._host = host
            self._port = port
            self._user = user
            self._password = password
    
        def get_obj(self,content, vimtype, name=None):
            '''
            列表返回,name 可以指定匹配的对象
            '''
            container = content.viewManager.CreateContainerView(content.rootFolder, vimtype, True)
            obj = [ view for view in container.view]
            return obj
    
        def get_conn(self):
            # 连接vcenter
            si = SmartConnectNoSSL(
                    host=self._host,
                    user=self._user,
                    pwd=self._password,
                    port=self._port)
            # disconnect this thing
            atexit.register(Disconnect, si)
            content = si.RetrieveContent()
            return content
    
        # 获取exsi的信息ip,磁盘使用情况等
        def get_esxi_host(self):
            esxi_host = {}
            content = self.get_conn()
            esxi_obj = self.get_obj(content, [vim.HostSystem])
            for esxi in esxi_obj:
                esxi_host[esxi.name] = {'datastore':{}}
    
                # for ds in esxi.datastore:
                #     esxi_host[esxi.name]['datastore'][ds.name] = {}
                #     esxi_host[esxi.name]['datastore'][ds.name]['总容量(G)'] = int((ds.summary.capacity)/1024/1024/1024)
                #     esxi_host[esxi.name]['datastore'][ds.name]['空闲容量(G)'] = int((ds.summary.freeSpace)/1024/1024/1024)
                #     esxi_host[esxi.name]['datastore'][ds.name]['类型'] = (ds.summary.type)
    
                total_capacity = 0
                free_capacity = 0
                for ds in esxi.datastore:
                    # esxi_host[esxi.name]['datastore'][ds.name] = {}
                    esxi_host[esxi.name] = {}
                    total_capacity += int((ds.summary.capacity)/1024/1024/1024)
                    free_capacity += int((ds.summary.freeSpace)/1024/1024/1024)
    
                esxi_host[esxi.name]['sotrage_used_percent'] = 100*(total_capacity - free_capacity)/total_capacity
            # print(esxi_host)
            return esxi_host
    
        # 获取exsi的host即ip列表
        def get_esxi_iplist(self):
            esxi_host = self.get_esxi_host()
            data = list()
            for exsi_ip in esxi_host:
                data.append({"{#EXSI_IP}": exsi_ip})
    
            return json.dumps({'data': data}, sort_keys=True, indent=7, separators=(",",":"))
    
        # 获取指定esxi的磁盘信息
        def get_esxi_storageinfo(self, exsi_ip):
            esxi_host = self.get_esxi_host()
    
            return esxi_host[exsi_ip]['sotrage_used_percent']
    
    
    def main():
        try:
    
            usage = "usage: %prog [options]
    gGet exsi Stat"
            parser = OptionParser(usage)
            
            # 接收参数
            parser.add_option("-l", "--list",  
                              action="store_true", dest="is_list", default=False,  help="if list all exsi ip")
            
            parser.add_option("--ip", "--ipaddr", 
                              action="store", dest="ipaddr", type="string", 
                              default="192.168.254.56", help="execute 'exsi info' to see more infomation")
            
            
            (options, args) = parser.parse_args()
            if 1 >= len(sys.argv):
                parser.print_help()
                return
            
            #exsi_ins = Exsi(options.ipaddr)
            exsi_ins = Exsi()
            if options.is_list == True:
                print(exsi_ins.get_esxi_iplist())
                return
    
            # print(redis.ins.get_esxi_storageinfo(optins.ip, exsi_ip = ip))
            print(exsi_ins.get_esxi_storageinfo(options.ipaddr))
    
        except Exception as expt:
            import traceback
            tb = traceback.format_exc()
            print(tb)
    
    
    if __name__ == '__main__':
        main()

     配置文件

    # vim /usr/local/zabbix_agents_3.2.0/conf/zabbix_agentd.conf

    UserParameter=custom.esxi.discovery, /usr/bin/python3 /usr/local/zabbix_agents_3.2.0/scripts/zabbix_esxi_storage.py --list
    UserParameter=custom.esxi.item[*],/usr/bin/python3 /usr/local/zabbix_agents_3.2.0/scripts/zabbix_esxi_storage.py --ip $1

  • 相关阅读:
    python测试开发django-43.xadmin添加小组件报错解决
    python测试开发django-42.xadmin自定义菜单项
    python测试开发django-41.crispy-forms设计标签式导航菜单(TabHolder)
    python测试开发django-40.模型(model)中choices使用
    python测试开发django-39.xadmin详情页面布局form_layout
    python测试开发django-45.xadmin添加小组件报错解决
    django后台xadmin如下配置(小结)
    禅道环境一键安装搭建指南
    Centos6.9部署ORTS5.0.22
    Linux 进程管理之四大名捕
  • 原文地址:https://www.cnblogs.com/reblue520/p/9643689.html
Copyright © 2011-2022 走看看