最近一直没有更新这部分的内容,会利用五一时间完成vcenter这一个系列。

这里先给大家一本关于vijava开发的书,比较实用。

地址:http://pan.baidu.com/s/1gfkl9mj。密码:t1y3

有网友评论要数据存储读写速度及延迟之后时间的实现。今天就先介绍关于java实现实时监控vcenter状态的内容,包括CPU、内存、网络、存储等。

在看这篇前如果还是新手,建议先看下我的第一篇  http://www.cnblogs.com/xiaodige/p/6721517.html(vijava基本连接和数据中心信息获取)

先说一下我之前是怎么发现,CPU、内存、网络、存储等可以监控的内容。我用vsphere client连接vcenter查看客户端所能监控的属性.

建议大家在实现功能前,先看下官方文档关于性能监控的知识。贴上连接vcenter6.0的官方文档连接。http://pubs.vmware.com/vsphere-60/index.jsp

比如要监控虚拟机的性能信息:首先得保证虚拟机开机,选择“性能选项”,点击“图标选项”,这样就能看到它所支持的性能监控信息。下面贴图:

下图左边就是该对象具体能监控的信息,右边就是具体性能,使用率啊等等。

做性能监控这块,如果不知道具体能监控对象的哪些属性就打开客户端看看。下面就贴上具体的java实现代码。

package com.iking.vmware.performance;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.iking.vmware.bean.PerformanceManage;
import com.iking.vmware.bean.VsphereConst;
import com.iking.vmware.connection.ConnectedVimServiceBase;
import com.iking.vmware.vim25.PerfCounterInfo;
import com.iking.vmware.vim25.PerfEntityMetric;
import com.iking.vmware.vim25.PerfEntityMetricBase;
import com.iking.vmware.vim25.PerfMetricId;
import com.iking.vmware.vim25.PerfMetricIntSeries;
import com.iking.vmware.vim25.PerfMetricSeries;
import com.iking.vmware.vim25.PerfQuerySpec;
import com.iking.vmware.vim25.PerfSampleInfo;
import com.iking.vmware.vim25.mo.Folder;
import com.iking.vmware.vim25.mo.HostSystem;
import com.iking.vmware.vim25.mo.InventoryNavigator;
import com.iking.vmware.vim25.mo.ManagedEntity;
import com.iking.vmware.vim25.mo.PerformanceManager; /**
* @description 监控统计vcenter所有对象性能数据
* @date 2017年2月9日11:46:35
* @version 1.1
* @author DiWk
*/
public class PerformanceCounter {
private ConnectedVimServiceBase cs = null; public ConnectedVimServiceBase getCs() {
return cs;
} public void setCs(ConnectedVimServiceBase cs) {
this.cs = cs;
} /**
* @description 根据属性名称、类型、对象、采集间隔获取所有的性能数据
* @date 2017年2月8日14:37:58
* @return PerformanceMap 性能数据map对象
* @version 1.1
* @author DiWk
*/
public Map<String, PerformanceManage> getPerfData(String nameInfo, List<String> groupInfo, ManagedEntity mo,
Integer interval) {
Map<String, PerformanceManage> PerformanceMap = null; Date date = new Date();
Date sTime = new Date(date.getTime() - 24 * 60 * 60 * 1000); Calendar calBegin = Calendar.getInstance();
calBegin.setTime(sTime); Calendar calEnd = Calendar.getInstance();
calEnd.setTime(date); try {
PerformanceMap = new HashMap<String, PerformanceManage>();
if (mo != null) {
PerformanceManager performanceManager = cs.si.getPerformanceManager();
PerfCounterInfo[] cInfo = performanceManager.getPerfCounter(); Map<Integer, PerfCounterInfo> counters = new HashMap<Integer, PerfCounterInfo>(); for (PerfCounterInfo pcInfo : cInfo) {
counters.put(new Integer(pcInfo.getKey()), pcInfo);
} PerfMetricId[] listpermeid = performanceManager.queryAvailablePerfMetric(mo, null, null, interval); ArrayList<PerfMetricId> mMetrics = new ArrayList<PerfMetricId>();
if (listpermeid != null) {
for (int index = 0; index < listpermeid.length; ++index) {
if (counters.containsKey(new Integer(listpermeid[index].getCounterId()))) {
mMetrics.add(listpermeid[index]);
}
}
} PerfQuerySpec qSpec = new PerfQuerySpec();
qSpec.setEntity(mo.getMOR());
qSpec.setMetricId(listpermeid);
qSpec.setStartTime(calBegin);
qSpec.setEndTime(calEnd);
qSpec.setIntervalId(interval);
qSpec.setFormat("normal"); PerfQuerySpec[] arryQuery = { qSpec }; PerfEntityMetricBase[] pValues = performanceManager.queryPerf(arryQuery); if (pValues == null || pValues.length <= 0) {
return null;
}
PerfSampleInfo[] listperfsinfo = ((PerfEntityMetric) pValues[0]).getSampleInfo();
for (int i = 0; i < pValues.length; i++) {
PerfMetricSeries[] listpems = ((PerfEntityMetric) pValues[i]).getValue(); for (int vi = 0; vi < listpems.length; ++vi) {
PerfCounterInfo pci = (PerfCounterInfo) counters
.get(new Integer(listpems[vi].getId().getCounterId())); if (pci != null) {
for (String Info : groupInfo) {
PerformanceManage performanceManage = new PerformanceManage();
performanceManage.setStartTime(listperfsinfo[0].getTimestamp().getTime());
performanceManage
.setEndTime((listperfsinfo[listperfsinfo.length - 1]).getTimestamp().getTime());
if (pci.getNameInfo().getKey().equalsIgnoreCase(nameInfo)
&& pci.getGroupInfo().getKey().equalsIgnoreCase(Info)) {
if (listpems[vi] instanceof PerfMetricIntSeries) {
PerfMetricIntSeries val = (PerfMetricIntSeries) listpems[vi];
long[] lislon = val.getValue(); List<Long> asList = new ArrayList<Long>();
for (Long k : lislon) {
asList.add(k);
}
performanceManage.setPerformanceValues(asList);
PerformanceMap.put(Info, performanceManage);
}
}
}
}
}
} }
} catch (Exception e) {
e.printStackTrace();
}
return PerformanceMap;
} /** main测试方法 */
public static void main(String[] args) throws Exception {
PerformanceCounter performanceCounter2 = new PerformanceCounter();
ConnectedVimServiceBase cs = new ConnectedVimServiceBase();
cs.connect("192.168.1.253", "administrator@vsphere.local", "Iking!@#456");
performanceCounter2.setCs(cs);
Folder rootFolder = cs.si.getRootFolder();
HostSystem dataCenter = (HostSystem) new InventoryNavigator(rootFolder)
.searchManagedEntity(VsphereConst.HOSTSYSTEM, "192.168.1.254");
List<String> listNm = new ArrayList<String>();
listNm.add("datastore");
Map<String, PerformanceManage> perfData = performanceCounter2.getPerfData("write", listNm, dataCenter, 20);
PerformanceManage performanceManage = perfData.get("datastore");
List<Long> performanceValues = performanceManage.getPerformanceValues();
System.out.println(performanceValues.toString());
}
}

上面就是通过Java代码实现对vcenter性能的实时监控,相信大家结合官方文档和我分享的电子书一定能实现自己想要的效果。

关于数据存储并没有历史信息的监控,只有实时信息的监控。所以当我统计数据存储的历史信息时,我是累加了所有的虚拟机、主机关于数据存储的数据。我知道这不是一个很好的方法,但是目前没想到更好的。希望和网友分享学习。

Vmware Vsphere WebService之vijava 开发(二)一性能信息的采集(实时监控)的更多相关文章

  1. Vmware Vsphere WebService之vijava 开发一-vcenter连接、及集群信息获取

    开始是通过java代码调用vsphere提供的原始接口,从而控制vcenter的操作.当第一个版本做完之后发现代码执行的速度特别慢,后来在网上看到有人用vijava(对vsphere原始接口封装)编程 ...

  2. Vmware Vsphere WebService SDK开发(第一讲)-基本知识学习

    刚开始这方面开发的时候,不知道如何下手,能够查到的资料特别少,而且看到很多网友和我一样也在找这方面的资料.接下来的一段时间我就结合自己所参与的项目,完成关于Vmware Vsphere WebServ ...

  3. Vmware vsphere webservice sdk 连接打开慢的问题

    还在为VimService实例化速度慢的问题烦恼吗?这有一篇文章可以帮你解决问题,英文水平所限,就不翻译了,原文地址http://kb.vmware.com/selfservice/microsite ...

  4. 二十九、rsync+inotity实时监控同步工具

    一.场景应用:                                    客户通过url访问资源(查询,下载等),并发量是非常高的,所以运用负载均衡分担web服务器的压力,在后端连接不同的 ...

  5. VMware vSphere 服务器虚拟化之二十五 桌面虚拟化之终端服务池

    VMware vSphere 服务器虚拟化之二十五 桌面虚拟化之终端服务池 终端服务池是指由一台或多台微软终端服务器提供服务的桌面源组成的池.终端服务器桌面源可交付多个桌面.它具有以下特征: 1.终端 ...

  6. VMware vSphere 服务器虚拟化之二十二桌面虚拟化之创建View Composer链接克隆的虚拟桌面池

    VMware vSphere 服务器虚拟化之二十二桌面虚拟化之创建View Composer链接克隆的虚拟桌面池 在上一节我们创建了完整克隆的自动专有桌面池,在创建过程比较缓慢,这次我们将学习创建Vi ...

  7. VMware vSphere 服务器虚拟化之二十八 桌面虚拟化之安装View传输服务器

    VMware vSphere 服务器虚拟化之二十八 桌面虚拟化之安装View传输服务器 View 传输服务器用于管理和简化数据中心与在最终用户本地系统上检出使用的 View 桌面之间的数据传输.必须安 ...

  8. VMware vSphere 服务器虚拟化之二十七桌面虚拟化之View中使用Thinapp软件虚拟化

    VMware vSphere 服务器虚拟化之二十七桌面虚拟化之View中使用Thinapp软件虚拟化 VMware ThinApp 应用程序虚拟化软件是无代理解决方案,通过将应用程序隔离并封装为EXE ...

  9. VMware vSphere 服务器虚拟化之二十六 桌面虚拟化之View Persona Management

    VMware vSphere 服务器虚拟化之二十六 桌面虚拟化之View Persona Management 实验失败告终,启动VMware View Persona Management服务报10 ...

随机推荐

  1. 利用cropper插件裁剪本地图片,然后将裁剪过后的base64图片上传至七牛云空间

    现在做的项目需要做一些图片处理,由于时间赶急,之前我便没有处理图片,直接将图片放在input[type=file]里面,以文件的形式提交给后台,这样做简直就是最低级的做法,之后各种问题便出来了,人物头 ...

  2. idea中编译项目报错 java: javacTask: 源版本 1.8 需要目标版本 1.8

    问题如上面所叙: > idea中编译项目报错 java: javacTask: 源版本 1.8 需要目标版本 1.8 解决方案: > Setting->Compiler->Ja ...

  3. 纯HTML自动刷新页面或重定向

    refresh 属性值  --  刷新与跳转(重定向)页面 refresh出现在http-equiv属性中,使用content属性表示刷新或跳转的开始时间与跳转的网址 refresh示例一:5秒之后刷 ...

  4. 启动tomcat直接报错:org.apache.tomcat.util.digester.Digester startElement

    今天很奇怪,自己手动搭建了一个ssm(spring+springmvc+mybatis)的项目,然后添加到tomcat下,启动直接报错: 2017-3-19 9:24:47 org.apache.to ...

  5. 修改jsp默认编码

    新建一个jsp页面默认的PageEncoding属性是iso8859-1,但是要使用中文的话,就乱码了,下面是修改新建jsp默认编码的步骤.

  6. iOS开发之UIPickerView

    1.使用方法 UIPickerView使用和UITableView大致类似.首先设置ViewController为数据源,然后遵守数据源协议< UIPickerViewDataRecouce&g ...

  7. 模式识别与机器学习—bagging与boosting

    声明:本文用到的代码均来自于PRTools(http://www.prtools.org)模式识别工具箱,并以matlab软件进行实验. (1)在介绍Bagging和Boosting算法之前,首先要简 ...

  8. oracle事物总结(转)

    关于Oracle事务的总结 1.什么是事务,事务的特性是什么? 事务的任务便是使数据库从一种状态变换成为另一种状态,这不同于文件系统,它是数据库所特用的.它的特性有四个:TOM总结为ACID即原子性a ...

  9. 核心模块Path

    核心模块Path 作用:用于帮助程序员来操作硬盘上的路径. 核心模块注意点:当引用核心模块的时候直接require('模块名'),不需要加任何路径或者后缀. Path中的常用API: dirname( ...

  10. 【WCF】错误处理(三):错误协定

    最近折腾换电脑的事,博客就更新慢了点.好,不废话,直入正题. 前面老周介绍过,SOAP消息中的错误信息是用一个 Fault 元素来包装的,前面老周也讲了其中的 FaultCode 元素,即可以对错误信 ...