设为首页 收藏本站
查看: 1005|回复: 0

[经验分享] 【zabbix】监控ESXi上虚拟机硬盘的增长量及占用量

[复制链接]

尚未签到

发表于 2019-1-22 08:20:46 | 显示全部楼层 |阅读模式
  因为公司之前是拿硬件堆出来的环境现在想要上虚拟化所以我们现在的环境大多都是通过P2V把原来的机器腾出来之后安装ESXi然后就在本地硬盘上跑虚拟机我也知道很不安全所以我们就需要面临几个问题以前的节点配置的硬盘空间和内存都不大所以我们跑虚拟机的话硬盘和内存就会特别吃力。当然内存跑满了顶多是性能上面有点问题但是硬盘跑满了整个节点上面的虚拟机就会陆续的停掉比较尴尬的问题。那么为了预防这个问题的发生在开始的时候我已经写了一篇怎么监控节点硬盘空间的量的文章面包ESXi 硬盘监控脚本使用方法详解http://mianbao.cn.com/forum.php?mod=viewthread&tid=173&fromuid=1并且对脚本的使用方法做了说明。

但是后来我们发现只有这监控是不够的节点硬盘达到了报警伐值之后我们该怎样采取措施成了我们最大的问题因为不能快速的定位哪个虚拟机占用的硬盘空间比较大那么我们就无法做到敏捷的反映。因为还要牵涉到虚拟机迁移这个是需要和业务沟通的如果你没有强有力的证据说明是某台虚拟机的问题那么沟通工作就会很难做。所以面包就又写了监控每个节点上虚拟机的脚本实现效果如下



  


重点不在图而在下面的值通过值我们可以快速的定位出来此节点上的虚拟机在一定的时候范围内新增了多少空间因为我们都是用的瘦分配并且在资源紧张的情况下很难控制超分的比率。另外需要注意的是此值是监控出来整个虚拟机的大小就是包含内存文件、镜像快照、VMDK、log等在节点上占用的空间。另外需要注意VMware是没有硬盘回收机制的比如我瘦分配一个硬盘为300G我真实用了150G突然有一天我清理日志清理了20G你在系统里看到你只是占用了130G但是在底层你所占用的仍然还是150G这里显示的就是这个值。

说完了原因和我的需求以及实现的效果我们一起来看一下实现的过程吧我们先来看一下脚本是肿么写的

#-*- coding:utf-8 -*-
'''
@Created on 2016
@author: MianBao
@author_web: Mianbao.cn.com
'''
import copy
import ssl
from pysphere import VIServer,VIProperty
from zabbix_send import zabbix_sender

def GetNodeInfo(Server):
    managed_object_types = 'VirtualMachine'
    properties = [
    'summary.runtime.host',
    'summary.storage.committed',
    'name',
    ]
    props = Server._retrieve_properties_traversal(property_names=properties,obj_type=managed_object_types)
    vms = dict()
    for item in props:
        vm = {}
        host_id = None
        for p in item.PropSet:
            if p.Name == 'summary.runtime.host':
                if vms.get(p.Val,None):
                    host_id = p.Val
            vm[p.Name] = p.Val
        if host_id:
            vms[host_id].append(vm)
        else:
            vms[vm['summary.runtime.host']] = [vm,]
    return vms
def GetHosts(s):
    hosts = s.get_hosts()
    return hosts
def main(s,zabbix_info):
    hosts = GetHosts(s)
    vms = GetNodeInfo(s)
    for x,y in vms.items():
        for m in y:
            response = SendData(x,m,hosts,zabbix_info)
            print response
    return response
def SendData(x,m,hosts,zabbix_info):
    zabbix_vm = zabbix_sender(**zabbix_info)
    value = dict()
    value['host'] = hosts.get(x,None)
    value['key'] = 'vmware.vm'
    vm_name = m.get('name')
    value['value'] = '{"data":[{"{#DATA}":"%s"}]}' % str(vm_name)
    zabbix_vm.adddata(**copy.deepcopy(value))
    print hosts.get(x,None),'--------',vm_name
    for key,val in m.items():
        if key not in ['summary.runtime.host','name',]:
            value['key'] = '%s[%s]' % (key, vm_name)
            value['value'] = val
            zabbix_vm.adddata(**copy.deepcopy(value))
    response=zabbix_vm.send()
    return response  以上为实现的主要代码还需要向"get_disk_info.py"下面调用一下这个函数。接下来我们来看一下模板中该怎么设置新增一个“discovery rules”然后key设置如下图所示

设置“discovery rules”并设置其item如下


基本设置方法如上所述




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-666180-1-1.html 上篇帖子: 解决Zabbix 3.0中 php7不支持always_populate_raw_post_data = 下篇帖子: 配置zabbix已使用内存更准确和可用内存使用率
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表