使用VMware VSphere WebService SDK进行开发 (六)——检测告警信息

获取告警信息相对而言比较简单点,这里先陈述告警信息的pojo类,作为存储告警信息的源头(省略getter和setter方法):

public class AlarmItem
{
	//对象
	private String ObjectName;
	//状态
	private ManagedEntityStatus overallStatus;
	//名称
	private String alarmName;
	//触发时间
	private Date time;
	//确认时间
	private Date acknowledgedTime;
	//确认者
	private String acknowledgedByUser;
	//是否被确认
	private Boolean acknowledged;

}

 

以获取主机告警信息为例:

	public static List<AlarmItem> getHostAlarms(String hostName) throws Exception
	{
		List<AlarmItem> ansList = null;
		ManagedObjectReference hostmor = getHostByHostName(hostName);
		ansList = getAlarms(hostmor);
		return ansList;
	}

这里先根据主机名称获取主机的对象(HostSystem),相关代码可以参考前面的相关文章。

接下去就是获取告警的方法getAlarms(ManagedObjectReference mor):

private static List<AlarmItem> getAlarms(ManagedObjectReference mor) throws Exception
	{
		List<AlarmItem> ansList = new ArrayList<AlarmItem>();
		List<AlarmState> list = vimPort.getAlarmState(alarmManager, mor);
		for(AlarmState alarmState : list)
		{
			if(alarmState.getOverallStatus().toString().equals("YELLOW") || alarmState.getOverallStatus().toString().equals("RED"))
			{
				AlarmItem alarmItem = new AlarmItem();
				ManagedObjectReference alarm = alarmState.getAlarm();
				if(alarm!=null)
				{
					PropertyFilterSpec alarmFilterSpec = createAlarmFilterSpec(alarm);
					ArrayList<PropertyFilterSpec> listpfs = new ArrayList<PropertyFilterSpec>();
					listpfs.add(alarmFilterSpec);
					List<ObjectContent> listobjcont = retrievePropertiesAllObjects(listpfs);
					if(listobjcont != null)
					{
						ObjectContent oc = (ObjectContent) listobjcont.get(0);
						AlarmInfo alarmInfo = (AlarmInfo) oc.getPropSet().get(0).getVal();
						alarmItem.setAlarmName(alarmInfo.getName());
					}
				}
				alarmItem.setAcknowledged(alarmState.isAcknowledged());
				alarmItem.setAcknowledgedByUser(alarmState.getAcknowledgedByUser());
				alarmItem.setAcknowledgedTime(DateConvert.convertToDate(alarmState.getAcknowledgedTime()));
				alarmItem.setOverallStatus(alarmState.getOverallStatus());
				alarmItem.setTime(DateConvert.convertToDate(alarmState.getTime()));
				alarmItem.setObjectName(getObjectName(alarmState.getEntity()));
				ansList.add(alarmItem);
			}
		}
		return ansList;
	}
	private static PropertyFilterSpec createAlarmFilterSpec(ManagedObjectReference eventHistoryCollectorRef)
	{
		PropertySpec propSpec = new PropertySpec();
		propSpec.setAll(new Boolean(false));
		propSpec.getPathSet().add("info");
		propSpec.setType(eventHistoryCollectorRef.getType());

		ObjectSpec objSpec = new ObjectSpec();
		objSpec.setObj(eventHistoryCollectorRef);
		objSpec.setSkip(new Boolean(false));

		PropertyFilterSpec spec = new PropertyFilterSpec();
		spec.getPropSet().add(propSpec);
		spec.getObjectSet().add(objSpec);
		return spec;
	}

	private static String getObjectName(ManagedObjectReference mor) throws Exception
	{
		String objectName = null;

		PropertySpec propSpec = new PropertySpec();
		propSpec.setAll(new Boolean(false));
		propSpec.getPathSet().add("name");
		propSpec.setType(mor.getType());

		ObjectSpec objSpec = new ObjectSpec();
		objSpec.setObj(mor);
		objSpec.setSkip(new Boolean(false));

		PropertyFilterSpec spec = new PropertyFilterSpec();
		spec.getPropSet().add(propSpec);
		spec.getObjectSet().add(objSpec);

		ArrayList<PropertyFilterSpec> listpfs = new ArrayList<PropertyFilterSpec>();
		listpfs.add(spec);
		List<ObjectContent> listobjcont = retrievePropertiesAllObjects(listpfs);
		if(listobjcont != null)
		{
			ObjectContent oc = (ObjectContent) listobjcont.get(0);
			objectName = (String) oc.getPropSet().get(0).getVal();
		}

		return objectName;
	}

这样就可以获取相关的主机告警信息。

对于其他的,比如虚拟机的告警信息就可以这样:

	public static List<AlarmItem> getVmAlarms(String vmName) throws Exception
	{
		List<AlarmItem> ansList = null;
		ManagedObjectReference hostmor = getVmByVmName(vmName);
		ansList = getAlarms(hostmor);
		return ansList;
	}

对于其他的譬如vCenter, Cluster, Datacenter的告警就不一一赘述了,相信看得懂上面代码的小伙伴一定能很快的自己写出实现的方法。

这个系列暂时到此为止,如有意见或者建议的小伙伴记得在下方留言哦~

时间: 2024-09-22 07:10:13

使用VMware VSphere WebService SDK进行开发 (六)——检测告警信息的相关文章

使用VMware VSphere WebService SDK进行开发 (一)——基本信息阐述

网上对于VSphere WebService SDK的介绍比较少(至少我能查到的资料比较少),官方提供的也是英文版的api,而且没有注明使用方法.最近接触到关于VSphere WebService SDK的开发,刚开始也是烦躁,比如要获取一个cpu使用情况的信息,按照惯例,API应该提供类似:long getCpuUsage() 之类的接口,但是绝逼没有那么easy,不过很快掌握了规律.我觉得有必要分享一下我所了解到的知识点,希望能够给各位读者有那么一点抛砖引玉的作用. 我准备通过几篇文章来主要

使用VMware VSphere WebService SDK进行开发 (七)——获取数据中心、集群、主机、虚拟机的目录结构

在实际应用中,需要显示出数据中心(Datacenter).集群(ClusterComputeResource).主机(HostSystem).虚拟机(VirtualMachine)之间的目录关系.这里忽略VAPP以及APP. 正所谓无图无真相,先展示一张vSphere Client上的截图,以便形象的描述本文所要呈现的内容. 左边的目录树形象的展示了数据中心(Datacenter).集群(ClusterComputeResource).主机(HostSystem).虚拟机(VirtualMach

使用VMware VSphere WebService SDK进行开发 (二)——获取虚拟机cpu的使用情况

本文通过代码举例虚拟机cpu的使用情况来演示如何遍历搜寻VirtualMachine的对象,以及根据这个对象进行性能指标的见识.希望可以取到举一反三的效果. 首先下面先罗列出如何更具虚拟机的名称获得VirtualMachine的ManagedObjectReference对象. private static TraversalSpec getVmTraversalSpec() { TraversalSpec vAppToVM = new TraversalSpec(); vAppToVM.set

使用VMware VSphere WebService SDK进行开发 (三)——获取主机(HostSystem)的基本信息

通过前面两篇文章的了解,详细应该很快掌握的code路数,这里首先罗列如何获取主机(接下去也会成为HostSystem)的对象. private static TraversalSpec getHostSystemTraversalSpec() { SelectionSpec ss = new SelectionSpec(); ss.setName("VisitFolders"); TraversalSpec computeResourceToHostSystem = new Trave

使用VMware VSphere WebService SDK进行开发 (五)——根据虚拟机的名称获取对应主机的IP地址

在整个获取监视信息的过程中,最难获取的就是根据虚拟机的名称获得对应主机的IP地址的功能.(个人觉得比较绕,绕了好久我才找到) 首先根据虚拟机的名称获得对应主机(HostSystem)的ManagedObjectReference对象. RetrieveResult props = getRetrieveResultObjectWithProperty("VirtualMachine", "summary.runtime.host"); ManagedObjectRe

VMware 虚拟化编程(3) —VMware vSphere Web Service API 解析

目录 目录 前文列表 VMware vSphere Web Services API VMware vSphere Web Services SDK vSphere WS API 中的托管对象 Managed Object 托管对象引用 Managed Object References 托管对象属性收集器 PropertyCollector 连接 vCenter 并获取 MO 最后 前文列表 VMware 虚拟化编程(1) - VMDK/VDDK/VixDiskLib/VADP 概念简析 VM

fence vmware use vmware vSphere SDK for Perl

我们可以通过fence_vmware命令连接到vCenter来fence vCenter管理的虚拟机. 本文将简单的描述一下fence_vmware的使用, 以及/etc/cluster/cluster.conf的配置. 命令行帮助如下 : [root@digoal_02 soft_bak]# fence_vmware --help Usage: fence_vmware [options] Options: -o, --action=<action> Action: status, rebo

《VMware vSphere设计(原书第2版)》——3.1 检查管理层的组件

3.1 检查管理层的组件 什么是管理层呢?当然不是指公司的执行官或董事会.我们所说的管理层是指用于日常管理整个虚拟化基础设施的组件.本节将简要介绍vSphere的管理组件.首先从最主要的vCenter 服务器开始. VMware vCenter服务器 vCenter服务器(原名VirtualCenter服务器)是虚拟化基础设施中最关键的元素之一,是用于管理虚拟数据中心的管理应用程序.你会创建数据中心.集群.资源池.网络和数据存储:分配权限:配置告警:监控性能等.所有这些功能都是在vCenter服

VMware vSphere 关键概念理解与速查手册

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dgd2010.blog.51cto.com/1539422/1414113 此篇文章结合vCenter帮助手册和vSphere中文文档对VMware虚拟化中涉及的一些关键字或专有名词进行了部分整理,刚接触VMware虚拟化不久的朋友可以从中得到一些借鉴和提示.PS:本文概念基于VMware vSphere 5.5,同样适用于先前的vSphere发行版本. 参考: VMware