diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java index 92f4745a03c5..91984c637109 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java @@ -5104,7 +5104,6 @@ public VmStatsEntry getVmStat(final Connect conn, final String vmName) throws Li try { result = dm.qemuAgentCommand(QemuCommand.buildQemuCommand(QemuCommand.AGENT_NETWORK_GET_INTERFACES, null), 2, 0); if (StringUtils.isNotBlank(result) && !(result.startsWith("error"))) { - LOGGER.debug(dm.getName() + " >> " + result); JsonArray arrData = (JsonArray) new JsonParser().parse(result).getAsJsonObject().get("return"); for (JsonElement je : arrData) { JsonElement nicName = je.getAsJsonObject().get("name") == null ? null : je.getAsJsonObject().get("name"); diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetVmStatsCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetVmStatsCommandWrapper.java index a5ab3db49941..18c848c36eb4 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetVmStatsCommandWrapper.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtGetVmStatsCommandWrapper.java @@ -62,8 +62,8 @@ public Answer execute(final GetVmStatsCommand command, final LibvirtComputingRes } vmStatsNameMap.put(vmName, statEntry); - } catch (LibvirtException e) { - logger.warn("Can't get vm stats: " + e.toString() + ", continue"); + } catch (Exception e) { + logger.warn("Can't get vm stats for [{}], continue", vmName, e); } } return new GetVmStatsAnswer(command, vmStatsNameMap); diff --git a/server/src/main/java/com/cloud/server/StatsCollector.java b/server/src/main/java/com/cloud/server/StatsCollector.java index 3f1c7491c33d..d53c843bc4c0 100644 --- a/server/src/main/java/com/cloud/server/StatsCollector.java +++ b/server/src/main/java/com/cloud/server/StatsCollector.java @@ -100,8 +100,6 @@ import com.cloud.agent.api.VmStatsEntryBase; import com.cloud.agent.api.VolumeStatsEntry; import com.cloud.api.ApiSessionListener; -import com.cloud.api.query.dao.UserVmJoinDao; -import com.cloud.api.query.vo.UserVmJoinVO; import com.cloud.capacity.CapacityManager; import com.cloud.cluster.ClusterManager; import com.cloud.cluster.ClusterManagerListener; @@ -127,6 +125,8 @@ import com.cloud.hypervisor.Hypervisor.HypervisorType; import com.cloud.network.Network; import com.cloud.network.as.AutoScaleManager; +import com.cloud.network.dao.NetworkDao; +import com.cloud.network.dao.NetworkVO; import com.cloud.org.Cluster; import com.cloud.resource.ResourceManager; import com.cloud.resource.ResourceState; @@ -362,6 +362,8 @@ public String toString() { @Inject private NicDao _nicDao; @Inject + private NetworkDao _networkDao; + @Inject private VlanDao _vlanDao; @Inject private AutoScaleManager _asManager; @@ -384,8 +386,6 @@ public String toString() { VirtualMachineManager virtualMachineManager; @Inject AlertManager _alertMgr; - @Inject - protected UserVmJoinDao userVmJoinDao; private final ConcurrentHashMap managementServerHostStats = new ConcurrentHashMap<>(); @@ -1441,19 +1441,6 @@ protected void runInContext() { List hosts = _hostDao.search(sc, null); logger.debug(String.format("VmStatsCollector is running to process VMs across %d UP hosts", hosts.size())); - List listL2netVMs = userVmJoinDao.listGuestTypeVMs(Network.GuestType.L2); - Map> l2NicMacsByVmId = new HashMap<>(); - - for (UserVmJoinVO vm : listL2netVMs) { - if (StringUtils.isBlank(vm.getMacAddress())) { - continue; - } - List l2NicMacs = l2NicMacsByVmId.computeIfAbsent(vm.getId(), k -> new ArrayList<>()); - if (!l2NicMacs.contains(vm.getMacAddress())) { - l2NicMacs.add(vm.getMacAddress()); - } - } - Map metrics = new HashMap<>(); for (HostVO host : hosts) { Date timestamp = new Date(); @@ -1476,14 +1463,25 @@ protected void runInContext() { Map agentNicMap = statsForCurrentIteration.getNicAddrMap(); if (agentNicMap != null) { - List l2NicMacs = l2NicMacsByVmId.get(vmId); - if (CollectionUtils.isNotEmpty(l2NicMacs)) { - for (String macAddress : l2NicMacs) { - NicVO nicVO = _nicDao.findByMacAddress(macAddress); - if (nicVO == null) { + Map normalizedAgentNicMap = new HashMap<>(); + for (Map.Entry entry : agentNicMap.entrySet()) { + if (StringUtils.isNotBlank(entry.getKey())) { + normalizedAgentNicMap.put(StringUtils.lowerCase(entry.getKey()), entry.getValue()); + } + } + + List nics = _nicDao.listByVmId(vmId); + if (CollectionUtils.isNotEmpty(nics)) { + for (NicVO nicVO : nics) { + NetworkVO network = _networkDao.findById(nicVO.getNetworkId()); + if (network == null || network.getGuestType() != Network.GuestType.L2) { + continue; + } + String macAddress = StringUtils.lowerCase(nicVO.getMacAddress()); + if (StringUtils.isBlank(macAddress)) { continue; } - String guestIpAddress = agentNicMap.get(macAddress); + String guestIpAddress = normalizedAgentNicMap.get(macAddress); if (StringUtils.equals(nicVO.getIPv4Address(), guestIpAddress)) { continue; } diff --git a/ui/src/App.vue b/ui/src/App.vue index fa75a8e635c3..c63aa7573bc8 100644 --- a/ui/src/App.vue +++ b/ui/src/App.vue @@ -25,16 +25,32 @@