vmware環境で各エンティティ(クラスター/データストア/ホスト/VM)のパフォーマンスデータを収集するために、java用のvmware sdkを使用しようとしています。目的は、ターゲット エンティティで使用可能な PerfMetricIds を で取得し、queryAvailablePerfMetric
それらをクエリして、カウンターの詳細、タイムスタンプ、および値をレポートすることです。
ただし、エンティティの PerfMetricIds を取得すると、検出された (返された) すべての PerfMetricId がデータを報告しているわけではありません。たとえば、各データストアについて、クエリを実行してもデータを返さない ID を少なくとも 4 つ取得します。これらの 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);
ヘルプ(またはディスカッション)をいただければ幸いです