查看: 1048|回复: 1

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

[复制链接]

415

主题

603

帖子

4607

积分

管理员

Rank: 9Rank: 9Rank: 9

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

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



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

说完了原因和我的需求,以及实现的效果,我们一起来看一下实现的过程吧,我们先来看一下脚本是肿么写的:
  1. #-*- coding:utf-8 -*-
  2. '''
  3. @Created on 2016

  4. @author: MianBao

  5. @author_web: Mianbao.cn.com

  6. '''
  7. import copy
  8. import ssl
  9. from pysphere import VIServer,VIProperty
  10. from zabbix_send import zabbix_sender



  11. def GetNodeInfo(Server):
  12.     managed_object_types = 'VirtualMachine'
  13.     properties = [
  14.     'summary.runtime.host',
  15.     'summary.storage.committed',
  16.     'name',
  17.     ]
  18.     props = Server._retrieve_properties_traversal(property_names=properties,obj_type=managed_object_types)
  19.     vms = dict()
  20.     for item in props:
  21.         vm = {}
  22.         host_id = None
  23.         for p in item.PropSet:
  24.             if p.Name == 'summary.runtime.host':
  25.                 if vms.get(p.Val,None):
  26.                     host_id = p.Val
  27.             vm[p.Name] = p.Val
  28.         if host_id:
  29.             vms[host_id].append(vm)
  30.         else:
  31.             vms[vm['summary.runtime.host']] = [vm,]
  32.     return vms
  33.             
  34. def GetHosts(s):
  35.     hosts = s.get_hosts()
  36.     return hosts

  37. def main(s,zabbix_info):
  38.     hosts = GetHosts(s)
  39.     vms = GetNodeInfo(s)
  40.     for x,y in vms.items():
  41.         for m in y:
  42.             response = SendData(x,m,hosts,zabbix_info)
  43.             print response
  44.     return response

  45. def SendData(x,m,hosts,zabbix_info):
  46.     zabbix_vm = zabbix_sender(**zabbix_info)
  47.    
  48.     value = dict()
  49.     value['host'] = hosts.get(x,None)
  50.     value['key'] = 'vmware.vm'
  51.     vm_name = m.get('name')
  52.     value['value'] = '{"data":[{"{#DATA}":"%s"}]}' % str(vm_name)
  53.     zabbix_vm.adddata(**copy.deepcopy(value))
  54.     print hosts.get(x,None),'--------',vm_name
  55.     for key,val in m.items():
  56.         if key not in ['summary.runtime.host','name',]:
  57.             value['key'] = '%s[%s]' % (key, vm_name)
  58.             value['value'] = val
  59.             zabbix_vm.adddata(**copy.deepcopy(value))
  60.    
  61.     response=zabbix_vm.send()
  62.     return response
复制代码
以上为实现的主要代码,还需要向"get_disk_info.py"下面调用一下这个函数。接下来我们来看一下模板中该怎么设置,新增一个“discovery rules”,然后key设置如下图所示:
QQ图片20160718151627.png
设置“discovery rules”,并设置其item如下:

QQ图片20160718151754.png
基本设置方法如上所述!






023454veup60n6fy5af656.png

注:本群仅解答本站所提供的帖子的解决方法中的疑问,其他问题如有能力会尽量帮助。询问方法入下:
1.发送看到的帖子至群中,把你要询问的问题跟在帖子中,站长会亲自进行解答!(为了避免大家提共同的问题,形成一个沉淀,所以请大家尽量把问题以发帖子的形式发出来!)

选一人白头,择一城终老
回复

使用道具 举报

0

主题

17

帖子

57

积分

注册会员

Rank: 2

积分
57
发表于 2017-3-12 11:38:28 | 显示全部楼层
666!!!!!!!!!!!!!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

!jz_fbzt! !jz_sgzt! !jz_xgzt! 快速回复 !jz_sctz! !jz_fhlb!
快速回复 返回顶部 返回列表