mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
Add JMX monitoring to cluster management
This commit is contained in:
parent
35275c1615
commit
d0892a964d
@ -69,7 +69,10 @@
|
|||||||
<target name="debug-suspend">
|
<target name="debug-suspend">
|
||||||
<java jar="${tomcat.home}/bin/bootstrap.jar" fork="true">
|
<java jar="${tomcat.home}/bin/bootstrap.jar" fork="true">
|
||||||
<jvmarg value="-Dcatalina.home=${tomcat.home}"/>
|
<jvmarg value="-Dcatalina.home=${tomcat.home}"/>
|
||||||
<jvmarg value="-Xdebug"/>
|
<jvmarg value="-Dcom.sun.management.jmxremote.port=20400"/>
|
||||||
|
<jvmarg value="-Dcom.sun.management.jmxremote.authenticate=false"/>
|
||||||
|
<jvmarg value="-Dcom.sun.management.jmxremote.ssl=false"/>
|
||||||
|
<jvmarg value="-Xdebug"/>
|
||||||
<jvmarg value="-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y"/>
|
<jvmarg value="-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y"/>
|
||||||
<jvmarg value="-ea"/>
|
<jvmarg value="-ea"/>
|
||||||
<jvmarg value="-Xms256m"/>
|
<jvmarg value="-Xms256m"/>
|
||||||
@ -87,6 +90,9 @@
|
|||||||
<echo message="Start Tomcat" />
|
<echo message="Start Tomcat" />
|
||||||
<java dir="${tomcat.home}/bin/" jar="${tomcat.home}/bin/bootstrap.jar" fork="true">
|
<java dir="${tomcat.home}/bin/" jar="${tomcat.home}/bin/bootstrap.jar" fork="true">
|
||||||
<jvmarg value="${assertion}"/>
|
<jvmarg value="${assertion}"/>
|
||||||
|
<jvmarg value="-Dcom.sun.management.jmxremote.port=20400"/>
|
||||||
|
<jvmarg value="-Dcom.sun.management.jmxremote.authenticate=false"/>
|
||||||
|
<jvmarg value="-Dcom.sun.management.jmxremote.ssl=false"/>
|
||||||
<jvmarg value="-Xms256m"/>
|
<jvmarg value="-Xms256m"/>
|
||||||
<jvmarg value="-Xmx384m"/>
|
<jvmarg value="-Xmx384m"/>
|
||||||
<jvmarg value="-ea"/>
|
<jvmarg value="-ea"/>
|
||||||
@ -97,7 +103,10 @@
|
|||||||
<target name="debug-tomcat">
|
<target name="debug-tomcat">
|
||||||
<java jar="${tomcat.home}/bin/bootstrap.jar" fork="true">
|
<java jar="${tomcat.home}/bin/bootstrap.jar" fork="true">
|
||||||
<jvmarg value="-Dcatalina.home=${tomcat.home}"/>
|
<jvmarg value="-Dcatalina.home=${tomcat.home}"/>
|
||||||
<jvmarg value="-Xdebug"/>
|
<jvmarg value="-Dcom.sun.management.jmxremote.port=20400"/>
|
||||||
|
<jvmarg value="-Dcom.sun.management.jmxremote.authenticate=false"/>
|
||||||
|
<jvmarg value="-Dcom.sun.management.jmxremote.ssl=false"/>
|
||||||
|
<jvmarg value="-Xdebug"/>
|
||||||
<jvmarg value="${debug.jvmarg}"/>
|
<jvmarg value="${debug.jvmarg}"/>
|
||||||
<jvmarg value="-ea"/>
|
<jvmarg value="-ea"/>
|
||||||
<jvmarg value="-Xms256m"/>
|
<jvmarg value="-Xms256m"/>
|
||||||
|
|||||||
@ -47,6 +47,7 @@ import com.cloud.utils.db.DB;
|
|||||||
import com.cloud.utils.db.Transaction;
|
import com.cloud.utils.db.Transaction;
|
||||||
import com.cloud.utils.events.SubscriptionMgr;
|
import com.cloud.utils.events.SubscriptionMgr;
|
||||||
import com.cloud.utils.exception.CloudRuntimeException;
|
import com.cloud.utils.exception.CloudRuntimeException;
|
||||||
|
import com.cloud.utils.mgmt.JmxUtil;
|
||||||
import com.cloud.utils.net.MacAddress;
|
import com.cloud.utils.net.MacAddress;
|
||||||
import com.cloud.utils.net.NetUtils;
|
import com.cloud.utils.net.NetUtils;
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
@ -566,6 +567,12 @@ public class ClusterManagerImpl implements ClusterManager {
|
|||||||
|
|
||||||
for(ManagementServerHostVO mshost : removedNodeList) {
|
for(ManagementServerHostVO mshost : removedNodeList) {
|
||||||
activePeers.remove(mshost.getId());
|
activePeers.remove(mshost.getId());
|
||||||
|
|
||||||
|
try {
|
||||||
|
JmxUtil.unregisterMBean("ClusterManager", "Node " + mshost.getId());
|
||||||
|
} catch(Exception e) {
|
||||||
|
s_logger.warn("Unable to deregiester cluster node from JMX monitoring due to exception " + e.toString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
List<ManagementServerHostVO> newNodeList = new ArrayList<ManagementServerHostVO>();
|
List<ManagementServerHostVO> newNodeList = new ArrayList<ManagementServerHostVO>();
|
||||||
@ -577,6 +584,12 @@ public class ClusterManagerImpl implements ClusterManager {
|
|||||||
s_logger.debug("Detected management node joined, id:" + mshost.getId() + ", nodeIP:" + mshost.getServiceIP());
|
s_logger.debug("Detected management node joined, id:" + mshost.getId() + ", nodeIP:" + mshost.getServiceIP());
|
||||||
}
|
}
|
||||||
newNodeList.add(mshost);
|
newNodeList.add(mshost);
|
||||||
|
|
||||||
|
try {
|
||||||
|
JmxUtil.registerMBean("ClusterManager", "Node " + mshost.getId(), new ClusterManagerMBeanImpl(mshost));
|
||||||
|
} catch(Exception e) {
|
||||||
|
s_logger.warn("Unable to regiester cluster node into JMX monitoring due to exception " + e.toString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -106,9 +106,9 @@ import com.cloud.host.dao.HostDao;
|
|||||||
import com.cloud.hypervisor.Hypervisor.HypervisorType;
|
import com.cloud.hypervisor.Hypervisor.HypervisorType;
|
||||||
import com.cloud.network.IPAddressVO;
|
import com.cloud.network.IPAddressVO;
|
||||||
import com.cloud.network.Network;
|
import com.cloud.network.Network;
|
||||||
|
import com.cloud.network.Network.GuestIpType;
|
||||||
import com.cloud.network.NetworkManager;
|
import com.cloud.network.NetworkManager;
|
||||||
import com.cloud.network.NetworkVO;
|
import com.cloud.network.NetworkVO;
|
||||||
import com.cloud.network.Network.GuestIpType;
|
|
||||||
import com.cloud.network.Networks.TrafficType;
|
import com.cloud.network.Networks.TrafficType;
|
||||||
import com.cloud.network.dao.FirewallRulesDao;
|
import com.cloud.network.dao.FirewallRulesDao;
|
||||||
import com.cloud.network.dao.IPAddressDao;
|
import com.cloud.network.dao.IPAddressDao;
|
||||||
@ -2245,8 +2245,12 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
|
|||||||
UserVmVO vm = profile.getVirtualMachine();
|
UserVmVO vm = profile.getVirtualMachine();
|
||||||
Account owner = _accountDao.findById(vm.getAccountId());
|
Account owner = _accountDao.findById(vm.getAccountId());
|
||||||
|
|
||||||
if (owner == null || owner.getState() == Account.State.disabled) {
|
if (owner == null) {
|
||||||
throw new PermissionDeniedException("The owner of " + vm + " either does not exist or is disabled: " + vm.getAccountId());
|
throw new PermissionDeniedException("The owner of " + vm + " does not exist: " + vm.getAccountId());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (owner.getState() == Account.State.disabled) {
|
||||||
|
throw new PermissionDeniedException("The owner of " + vm + " is disabled: " + vm.getAccountId());
|
||||||
}
|
}
|
||||||
|
|
||||||
VirtualMachineTemplate template = profile.getTemplate();
|
VirtualMachineTemplate template = profile.getTemplate();
|
||||||
|
|||||||
@ -17,9 +17,11 @@
|
|||||||
*/
|
*/
|
||||||
package com.cloud.utils.mgmt;
|
package com.cloud.utils.mgmt;
|
||||||
|
|
||||||
|
import java.lang.management.ManagementFactory;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import javax.management.InstanceAlreadyExistsException;
|
import javax.management.InstanceAlreadyExistsException;
|
||||||
|
import javax.management.InstanceNotFoundException;
|
||||||
import javax.management.MBeanRegistrationException;
|
import javax.management.MBeanRegistrationException;
|
||||||
import javax.management.MBeanServer;
|
import javax.management.MBeanServer;
|
||||||
import javax.management.MBeanServerFactory;
|
import javax.management.MBeanServerFactory;
|
||||||
@ -28,12 +30,59 @@ import javax.management.NotCompliantMBeanException;
|
|||||||
import javax.management.ObjectName;
|
import javax.management.ObjectName;
|
||||||
|
|
||||||
public class JmxUtil {
|
public class JmxUtil {
|
||||||
public static void registerMBean(ManagementBean mbean) throws MalformedObjectNameException, InstanceAlreadyExistsException, MBeanRegistrationException, NotCompliantMBeanException {
|
public static ObjectName registerMBean(ManagementBean mbean)
|
||||||
|
throws MalformedObjectNameException, InstanceAlreadyExistsException, MBeanRegistrationException, NotCompliantMBeanException {
|
||||||
|
|
||||||
|
return registerMBean(mbean.getName(), null, mbean);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ObjectName registerMBean(String objTypeName, String objInstanceName, Object mbean)
|
||||||
|
throws MalformedObjectNameException, InstanceAlreadyExistsException, MBeanRegistrationException, NotCompliantMBeanException {
|
||||||
|
|
||||||
|
String name = "com.cloud:type=" + objTypeName;
|
||||||
|
if(objInstanceName != null && !objInstanceName.isEmpty())
|
||||||
|
name += ", name=" + objInstanceName;
|
||||||
|
ObjectName objectName = new ObjectName(name);
|
||||||
|
|
||||||
ArrayList<MBeanServer> server = MBeanServerFactory.findMBeanServer(null);
|
ArrayList<MBeanServer> server = MBeanServerFactory.findMBeanServer(null);
|
||||||
if (server.size() > 0) {
|
if (server.size() > 0) {
|
||||||
MBeanServer mBeanServer = server.get(0);
|
MBeanServer mBeanServer = server.get(0);
|
||||||
ObjectName objectName = new ObjectName("com.cloud: type=" + mbean.getName());
|
|
||||||
mBeanServer.registerMBean(mbean, objectName);
|
mBeanServer.registerMBean(mbean, objectName);
|
||||||
|
return objectName;
|
||||||
|
} else {
|
||||||
|
MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
|
||||||
|
mBeanServer.registerMBean(mbean, objectName);
|
||||||
|
return objectName;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void unregisterMBean(String objTypeName, String objInstanceName)
|
||||||
|
throws MalformedObjectNameException, MBeanRegistrationException, InstanceNotFoundException {
|
||||||
|
|
||||||
|
ObjectName name = composeMBeanName(objTypeName, objInstanceName);
|
||||||
|
unregisterMBean(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void unregisterMBean(ObjectName name)
|
||||||
|
throws MalformedObjectNameException, MBeanRegistrationException, InstanceNotFoundException {
|
||||||
|
|
||||||
|
ArrayList<MBeanServer> server = MBeanServerFactory.findMBeanServer(null);
|
||||||
|
if (server.size() > 0) {
|
||||||
|
MBeanServer mBeanServer = server.get(0);
|
||||||
|
mBeanServer.unregisterMBean(name);
|
||||||
|
} else {
|
||||||
|
MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
|
||||||
|
mBeanServer.unregisterMBean(name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ObjectName composeMBeanName(String objTypeName, String objInstanceName)
|
||||||
|
throws MalformedObjectNameException {
|
||||||
|
|
||||||
|
String name = "com.cloud:type=" + objTypeName;
|
||||||
|
if(objInstanceName != null && !objInstanceName.isEmpty())
|
||||||
|
name += ", name=" + objInstanceName;
|
||||||
|
|
||||||
|
return new ObjectName(name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user