有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

VMWare java SDK:可用的PerfMetricID何时不报告数据?

我正在尝试使用vmware sdk for java来收集vmware环境中每个实体(集群/数据存储/主机/虚拟机)的性能数据。 其思想是使用queryAvailablePerfMetric获取目标实体的可用perfmetricid,查询这些perfmetricid并报告计数器、时间戳和值的详细信息

但是,当我获取实体的PerfMetricId时,并不是每个检测到(返回的)PerfMetricId都在报告数据。例如,对于每个数据存储,我得到至少4个在查询时不返回数据的ID,这些ID表示与平均读写操作数关联的计数器,对于集群,我缺少cpu使用率,等等

我想知道这是什么时候发生的?不是由queryAvailablePerfMetric返回的每个度量都应该报告数据吗?我错过了什么

最小代码段:

// VMWare credentials
String vmwareUrl = args[0];
String vmwareUsername = args[1];
String vmwarePassword = args[2];

// connect to vCenter
ServiceInstance si = new ServiceInstance(new URL(vmwareUrl), vmwareUsername, vmwarePassword, true);
// get performance manager
PerformanceManager perfMgr = si.getPerformanceManager();

// define the time window (the last one hour)
Calendar calTo = Calendar.getInstance();
Calendar calFrom = Calendar.getInstance();
calFrom.setTime(calTo.getTime());
calFrom.add(Calendar.HOUR, -1);

// get any datastore for testing purposes
Folder rootFolder = si.getRootFolder();
ManagedEntity[] datastores = new InventoryNavigator(rootFolder).searchManagedEntities("Datastore");
ManagedEntity me = datastores[1];

// query all available metrics for the entity
PerfMetricId[] availablePmis = perfMgr.queryAvailablePerfMetric(me, calFrom, calTo, perfMgr.getHistoricalInterval()[0].getSamplingPeriod());

// create PerfQuerySpec
PerfQuerySpec qSpec = new PerfQuerySpec();
qSpec.setEntity(me.getMOR());
qSpec.setMetricId(availablePmis);
qSpec.setFormat("csv");
qSpec.setStartTime(calFrom);
qSpec.setEndTime(calTo);

// query perf
PerfEntityMetricBase[] perfValues = perfMgr.queryPerf(new PerfQuerySpec[]{qSpec});

// Printing
System.out.println("Found pmis (CounterIDs only): ");
for (PerfMetricId pmi : availablePmis){
    System.out.print(pmi.getCounterId() + ", ");
}
System.out.print("\nPmis with values:");
int pmisCount=0;
for (PerfEntityMetricBase value : perfValues) {
    PerfMetricSeriesCSV[] csvValues = ((PerfEntityMetricCSV) value).getValue();
    pmisCount += csvValues.length;;
    for (PerfMetricSeriesCSV csv : csvValues) {
        System.out.println("Counter ID: " + csv.getId().getCounterId() + " ---- Metric instance: " + csv.getId().getInstance());
        System.out.println("\tInfo: " + ((PerfEntityMetricCSV) value).getSampleInfoCSV());
        System.out.println("\tValues: " + csv.getValue());
    }
}
System.out.println("---------------");
System.out.println("Detected PMIs: " + availablePmis.length);
System.out.println("PMIs with values: " + pmisCount);

任何帮助(或讨论)都将不胜感激


共 (0) 个答案