• 通过JMX获取weblogic的监控指标


    通过JMX获取weblogic的监控数据,包括JDBC,SESSION,SERVERLET,JVM等信息。主要用到weblogic自己的t3协议,所以要用到weblogic的jar包:wlfullclient.jar和wlclient.jar。这两个jar包怎么获取我专门在另外一篇文章中讲。下面贴一些获取监控指标的代码,做个备份只用吧。

    1、对JDBC的监控,只取了最重要的监控指标:

    package test;
    
    import java.io.IOException;
    import java.net.MalformedURLException;
    import java.util.Hashtable;
    
    import javax.management.MBeanServerConnection;
    import javax.management.MalformedObjectNameException;
    import javax.management.ObjectName;
    import javax.management.remote.JMXConnector;
    import javax.management.remote.JMXConnectorFactory;
    import javax.management.remote.JMXServiceURL;
    import javax.naming.Context;
    
    public class PrintJdbc {
    	private static MBeanServerConnection connection;
    	private static JMXConnector connector;
    	private static final ObjectName service;
    	
    
    	   static {
    	      try {
    	         service = new ObjectName("com.bea:Name=RuntimeService,Type=weblogic.management.mbeanservers.runtime.RuntimeServiceMBean");
    	      }catch (MalformedObjectNameException e) {
    	         throw new AssertionError(e.getMessage());
    	      }
    	   }
    	 
    	   public static void initConnection(String hostname, String portString, 
    	      String username, String password) throws IOException,
    	      MalformedURLException { 
    	      String protocol = "t3";
    	      Integer portInteger = Integer.valueOf(portString);
    	      int port = portInteger.intValue();
    	      String jndiroot = "/jndi/";
    	      String mserver = "weblogic.management.mbeanservers.runtime";
    	      JMXServiceURL serviceURL = new JMXServiceURL(protocol, hostname,
    	         port, jndiroot + mserver);
    	      Hashtable h = new Hashtable();
    	      h.put(Context.SECURITY_PRINCIPAL, username);
    	      h.put(Context.SECURITY_CREDENTIALS, password);
    	      h.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES,
    	         "weblogic.management.remote");
    	      connector = JMXConnectorFactory.connect(serviceURL, h);
    	      connection = connector.getMBeanServerConnection();
    	   }
    	
    	   public static ObjectName getServerRuntimes() throws Exception {
    		    return (ObjectName)connection.getAttribute(service,
    	    		  "ServerRuntime");
    	   }
    	   
    	  
    	   public  ObjectName getJDBCServer() throws Exception {
    		   ObjectName dc = getServerRuntimes();
    		   ObjectName jdbcService = (ObjectName)connection.getAttribute(dc,
    				   "JDBCServiceRuntime");
    		   return jdbcService;
    	   }
    	   
    		public ObjectName[] getJDBCDataSourceRuntime() throws Exception   {
    			ObjectName[] jdbcDataSourceRTMB = (ObjectName[]) connection.getAttribute(getJDBCServer(), "JDBCDataSourceRuntimeMBeans");
    			return jdbcDataSourceRTMB;
    		}
    		
    		
    	   public void printJdbc() throws Exception {
    		   ObjectName[] objectList = getJDBCDataSourceRuntime();
    		   if(objectList != null && objectList.length > 0){
    			   for(ObjectName obj : objectList){
    				   int connectionsTotalCount = (int) connection.getAttribute(obj, "ConnectionsTotalCount");
    				   int activeConnectionsCurrentCount = (int)connection.getAttribute(obj, "ActiveConnectionsCurrentCount");
    				   int activeConnectionsAverageCount = (int)connection.getAttribute(obj,"ActiveConnectionsAverageCount");
    				   int failuresToReconnectCount = (int)connection.getAttribute(obj, "FailuresToReconnectCount");
    				   String name = (String)connection.getAttribute(obj, "Name");
    				   int waitingForConnectionCurrentCount = (int)connection.getAttribute(obj, "WaitingForConnectionCurrentCount");
    				   long waitingForConnectionFailureTotal = (long)connection.getAttribute(obj, "WaitingForConnectionFailureTotal");
    				   int waitSecondsHighCount = (int)connection.getAttribute(obj, "WaitSecondsHighCount");
    				   int connectionDelayTime = (int)connection.getAttribute(obj, "ConnectionDelayTime");
    				   int activeConnectionsHighCount = (int)connection.getAttribute(obj, "ActiveConnectionsHighCount");
    				   int currCapacity = (int)connection.getAttribute(obj, "CurrCapacity");
    				   System.out.println("currCapacity==" + currCapacity);
    				   System.out.println("activeConnectionsHighCount==" + activeConnectionsHighCount);
    				   System.out.println("connectionDelayTime==" + connectionDelayTime);
    				   System.out.println("connectionsTotalCount==" + connectionsTotalCount);
    				   System.out.println("activeConnectionsCurrentCount==" + activeConnectionsCurrentCount);
    				   System.out.println("activeConnectionsAverageCount==" + activeConnectionsAverageCount);
    				   System.out.println("failuresToReconnectCount==" + failuresToReconnectCount);
    				   System.out.println("name==" + name);
    				   System.out.println("waitingForConnectionCurrentCount==" +waitingForConnectionCurrentCount );
    				   System.out.println("waitingForConnectionFailureTotal==" + waitingForConnectionFailureTotal);
    				   System.out.println("waitSecondsHighCount==" + waitSecondsHighCount);
    				  
    				
    			   }
    		   }
    	   }
    	   public static void main(String[] args) throws Exception {
    		 
    		      String hostname = "10.111.131.50";
    		      String portString = "7001";
    		      String username = "weblogic";
    		      String password = "weblogic123";
    		      PrintJdbc s = new PrintJdbc();
    		      initConnection(hostname, portString, username, password);
    		      s.printJdbc();
    		      connector.close();
    		   }
    	   
    	   
    }
    

      2、有关thread的监控:

    package test;
    
    import java.io.IOException;
    import java.net.MalformedURLException;
    import java.util.Hashtable;
    
    import javax.management.MBeanServerConnection;
    import javax.management.MalformedObjectNameException;
    import javax.management.ObjectName;
    import javax.management.remote.JMXConnector;
    import javax.management.remote.JMXConnectorFactory;
    import javax.management.remote.JMXServiceURL;
    import javax.naming.Context;
    
    public class PrintThread {
    
    	private static MBeanServerConnection connection;
    	private static JMXConnector connector;
    	private static final ObjectName service;
    	
    
    	   static {
    	      try {
    	         service = new ObjectName("com.bea:Name=RuntimeService,Type=weblogic.management.mbeanservers.runtime.RuntimeServiceMBean");
    	      }catch (MalformedObjectNameException e) {
    	         throw new AssertionError(e.getMessage());
    	      }
    	   }
    	 
    	   public static void initConnection(String hostname, String portString, 
    	      String username, String password) throws IOException,
    	      MalformedURLException { 
    	      String protocol = "t3";
    	      Integer portInteger = Integer.valueOf(portString);
    	      int port = portInteger.intValue();
    	      String jndiroot = "/jndi/";
    	      String mserver = "weblogic.management.mbeanservers.runtime";
    	      JMXServiceURL serviceURL = new JMXServiceURL(protocol, hostname,
    	         port, jndiroot + mserver);
    	      Hashtable h = new Hashtable();
    	      h.put(Context.SECURITY_PRINCIPAL, username);
    	      h.put(Context.SECURITY_CREDENTIALS, password);
    	      h.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES,
    	         "weblogic.management.remote");
    	      connector = JMXConnectorFactory.connect(serviceURL, h);
    	      connection = connector.getMBeanServerConnection();
    	   }
    	
    	   public static ObjectName getServerRuntimes() throws Exception {
    		    return (ObjectName)connection.getAttribute(service,
    	    		  "ServerRuntime");
    	   }
    	   
    	   public void printInfo() throws Exception{
    		   ObjectName objThreadPool = null;
    		   ObjectName serverRT = getServerRuntimes();
    		   
    		   objThreadPool = (ObjectName) connection.getAttribute(serverRT, "ThreadPoolRuntime");
    		   double throughput  = Double.parseDouble(String.valueOf(connection.getAttribute(
    				   objThreadPool,"Throughput")));
    		   System.out.println("throughput:" + throughput);
    		   
    		   int executeThreadTotalCount = Integer.parseInt(String.valueOf(connection.getAttribute(objThreadPool, "ExecuteThreadTotalCount")));
    		   System.out.println("executeThreadTotalCount:" + executeThreadTotalCount);
    		 
    		
    		   int executeThreadIdleCount = Integer.parseInt(String.valueOf(connection.getAttribute(objThreadPool, "ExecuteThreadIdleCount")));
    		   System.out.println("executeThreadIdleCount:" + executeThreadIdleCount);
    		  
    		   int StandbyThreadCount = Integer.parseInt(String.valueOf(connection.getAttribute(objThreadPool, "StandbyThreadCount")));
    	       System.out.println("StandbyThreadCount:" + StandbyThreadCount);
    	       
    	       
    	       long timestamp = System.currentTimeMillis() / 1000;
    			String metricJson = "";
    			String jsonFormat = "{"name": "weblogic_threadpool_metric_demo", " +
    	                ""command":"weblogic_threadpool_metric"," +
    	                ""type": "metric"," +
    	                ""handlers": ["influxdb"],"+
    	                ""output": "%s %.5f %d\n%s %d %d\n%s %d %d\n"," +
    	                ""status": 0}";
    			metricJson = String.format(jsonFormat,
    		              ".weblogic.threadpool.throughput", (double)throughput, timestamp,
    		              ".weblogic.threadpool.executeThreadTotalCount", (int)executeThreadTotalCount, timestamp,
    		              ".weblogic.threadpool.executeThreadIdleCount", (int)executeThreadIdleCount, timestamp);
    			System.out.println("metricJson==" + metricJson);
    			
    			
    			
    	   }
    	   
    	   
    	public static void main(String args[]) throws Exception {
    		 String hostname = "10.111.131.50";
    	      String portString = "7001";
    	      String username = "weblogic";
    	      String password = "weblogic123";
    	      PrintThread s = new PrintThread();
    	      initConnection(hostname, portString, username, password);
    	      s.printInfo();
    	      connector.close();
    	}
    }
    

      3、有关session的监控:

    package test;
    
    import java.io.IOException;
    import java.net.MalformedURLException;
    import java.util.Hashtable;
    
    import javax.management.MBeanServerConnection;
    import javax.management.MalformedObjectNameException;
    import javax.management.ObjectName;
    import javax.management.remote.JMXConnector;
    import javax.management.remote.JMXConnectorFactory;
    import javax.management.remote.JMXServiceURL;
    import javax.naming.Context;
    
    public class PrintServerState {
    	private static MBeanServerConnection connection;
    	private static JMXConnector connector;
    	private static final ObjectName service;
    	
    	
    	   static {
    	      try {
    	         service = new ObjectName("com.bea:Name=DomainRuntimeService,Type=weblogic.management.mbeanservers.domainruntime.DomainRuntimeServiceMBean");
    	      }catch (MalformedObjectNameException e) {
    	         throw new AssertionError(e.getMessage());
    	      }
    	   }
    	   
    	   public static void initConnection(String hostname, String portString, 
    	      String username, String password) throws IOException,
    	      MalformedURLException { 
    	      String protocol = "t3";
    	      Integer portInteger = Integer.valueOf(portString);
    	      int port = portInteger.intValue();
    	      String jndiroot = "/jndi/";
    	      String mserver = "weblogic.management.mbeanservers.domainruntime";
    	      JMXServiceURL serviceURL = new JMXServiceURL(protocol, hostname,
    	         port, jndiroot + mserver);
    	      Hashtable h = new Hashtable();
    	      h.put(Context.SECURITY_PRINCIPAL, username);
    	      h.put(Context.SECURITY_CREDENTIALS, password);
    	      h.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES,
    	         "weblogic.management.remote");
    	      connector = JMXConnectorFactory.connect(serviceURL, h);
    	      connection = connector.getMBeanServerConnection();
    	   }
    	   
    	   public static ObjectName[] getServerRuntimes() throws Exception {
    	      return (ObjectName[]) connection.getAttribute(service,
    	         "ServerRuntimes");
    	   }
    	   
    	   public static ObjectName[] getApplicationRuntimes(ObjectName serverRuntime) throws Exception {
    		   return (ObjectName[])connection.getAttribute(serverRuntime, "ApplicationRuntimes");
    	   }
    	   
    	   public static ObjectName[] getComponentRuntimes(ObjectName componentRutime) throws Exception {
    		   return (ObjectName[]) connection.getAttribute(componentRutime, "ComponentRuntimes");
    	   }
    	   
    	   
    	   public void printSessionState() throws Exception {
    		   ObjectName[] serverRT = getServerRuntimes();
    		   int length = (int) serverRT.length;
    		  
    		   for(int i = 0;i<length;i++){
    			   ObjectName[] applicationRT = getApplicationRuntimes(serverRT[i]);
    			   int length_app = (int)applicationRT.length;
    			 
    			   for(int y = 0;y<length_app;y++){
    				   String applicationName =  (String)connection.getAttribute(applicationRT[y], "ApplicationName");
    				  
    				   if(applicationName.equals("helloworld")){
    					  
    				   ObjectName[]  componentRuntime = getComponentRuntimes(applicationRT[y]);
    				   int length_component = (int)componentRuntime.length;
    				   System.out.println("length_component==" + length_component);
    				   for(int z = 0;z<length_component;z++){
    					   
    					   String type =  (String)connection.getAttribute(componentRuntime[z], "Type");
    					   if(type.equals("WebAppComponentRuntime")){
    						   
    					  
    					   int SessionsOpenedTotalCount = (int)connection.getAttribute(componentRuntime[z], "SessionsOpenedTotalCount");
    					   System.out.println("SessionsOpenedTotalCount==" + SessionsOpenedTotalCount);
    					   
    					   int openSessionsHighCount = (int)connection.getAttribute(componentRuntime[z], "OpenSessionsHighCount");
    					   System.out.println("openSessionsHighCount==" + openSessionsHighCount);
    					   
    					   int openSessionsCurrentCount = (int)connection.getAttribute(componentRuntime[z], "OpenSessionsCurrentCount");
    					   System.out.println("openSessionsCurrentCount==" + openSessionsCurrentCount);
    					   break;
    					   }
    					   
    				     }
    				     break;
    				  }
    			   }
    		   }
    	   }
    	   
    	   public void printNameAndState() throws Exception {
    	      ObjectName[] serverRT = getServerRuntimes();
    	      System.out.println("got server runtimes");
    	      int length = (int) serverRT.length;
    	      for (int i = 0; i < length; i++) {
    	    	
    	         String name = (String) connection.getAttribute(serverRT[i],
    	            "Name");
    	         
    	         String state = (String) connection.getAttribute(serverRT[i],
    	            "State");
    	         
    	      
    	         long activationTime  = (Long)connection.getAttribute(serverRT[i], "ActivationTime");
    	         System.out.println("Server name: " + name);
    	         System.out.println("Server state:" + state);
    	         System.out.println("Server activationTime:" + activationTime);
    	       
    	         String weblogicVersion  = (String) connection.getAttribute(serverRT[i], "WeblogicVersion");
    	         System.out.println("Server weblogicVersion:" + weblogicVersion);
    	         
    	         String weblogicHome = (String) connection.getAttribute(serverRT[i], "WeblogicHome");
    	         System.out.println("Server WeblogicHome:" +weblogicHome );
    	         
    	         
    	      }
    	   }
    	    public static void main(String[] args) throws Exception {
    	      String hostname = "10.111.131.50";
    	      String portString = "7001";
    	      String username = "weblogic";
    	      String password = "weblogic123";
    	       PrintServerState s = new PrintServerState();
    	      initConnection(hostname, portString, username, password);
    	      s.printNameAndState();
    	      s.printSessionState();
    	      connector.close();
    	   }
    }
    

      4、有关serverlet的监控:

    package test;
    
    import java.io.IOException;
    import java.net.MalformedURLException;
    import java.util.Hashtable;
    
    import javax.management.MBeanServerConnection;
    import javax.management.MalformedObjectNameException;
    import javax.management.ObjectName;
    import javax.management.remote.JMXConnector;
    import javax.management.remote.JMXConnectorFactory;
    import javax.management.remote.JMXServiceURL;
    import javax.naming.Context;
    
    public class PrintServerlet {
    
    	private static MBeanServerConnection connection;
    	   private static JMXConnector connector;
    	   private static final ObjectName service;
    	   private final String applicationName_app="helloworld";
    	   private final String serverletName1="index.jsp";
    	   private final String serverletName2="helloworld.jsp";
    	    
    	   static {
    	      try {
    	         service = new ObjectName(
    	          "com.bea:Name=DomainRuntimeService,Type=weblogic.management.mbeanservers.domainruntime.DomainRuntimeServiceMBean");
    	      }catch (MalformedObjectNameException e) {
    	         throw new AssertionError(e.getMessage());
    	      }
    	   }
    	   
    	   public static void initConnection(String hostname, String portString, 
    	      String username, String password) throws IOException,
    	      MalformedURLException { 
    	      String protocol = "t3";
    	      Integer portInteger = Integer.valueOf(portString);
    	      int port = portInteger.intValue();
    	      String jndiroot = "/jndi/";
    	      String mserver = "weblogic.management.mbeanservers.domainruntime";
    	       JMXServiceURL serviceURL = new JMXServiceURL(protocol, hostname,
    	         port, jndiroot + mserver);
    	      Hashtable h = new Hashtable();
    	      h.put(Context.SECURITY_PRINCIPAL, username);
    	      h.put(Context.SECURITY_CREDENTIALS, password);
    	      h.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES,
    	         "weblogic.management.remote");
    	      connector = JMXConnectorFactory.connect(serviceURL, h);
    	      connection = connector.getMBeanServerConnection();
    	   }
    	   
    	   public static ObjectName[] getServerRuntimes() throws Exception {
    	      return (ObjectName[]) connection.getAttribute(service,
    	         "ServerRuntimes");
    	   }
    	   
    	   public String getApplicationName(ObjectName objectName) throws Exception {
    		   return (String)connection.getAttribute(objectName, "Name");
    	   }
    	   
    	   public String getServletName(ObjectName objectName) throws Exception {
    		   return (String)connection.getAttribute(objectName,"Name");
    	   }
    	   
    	   public void getServletData() throws Exception {
    	      ObjectName[] serverRT = getServerRuntimes();
    	      int length = (int) serverRT.length;
    	      for (int i = 0; i < length; i++) {
    	         ObjectName[] appRT = 
    	            (ObjectName[]) connection.getAttribute(serverRT[i],
    	            "ApplicationRuntimes");
    	         int appLength = (int) appRT.length;
    	         for (int x = 0; x < appLength; x++) {
    	        	 String applicationName = getApplicationName(appRT[x]);
    	        	 if(applicationName_app.equals(applicationName)){
    	        		 System.out.println("Application name: " + applicationName);
    	        		 ObjectName[] compRT = 
    	        	               (ObjectName[]) connection.getAttribute(appRT[x],
    	        	               "ComponentRuntimes");
    	        	     int compLength = (int) compRT.length;
    	        	 
    	            for (int y = 0; y < compLength; y++) {
    	            	printValue("Component name",(String)connection.getAttribute(compRT[y], "Name"));
    	               String componentType = 
    	                  (String) connection.getAttribute(compRT[y], "Type");
    	               System.out.println(componentType.toString());
    	               if (componentType.toString().equals("WebAppComponentRuntime")){
    	                  ObjectName[] servletRTs = (ObjectName[])
    	                     connection.getAttribute(compRT[y], "Servlets");
    	                  int servletLength = (int) servletRTs.length;
    	                  for (int z = 0; z < servletLength; z++) {
    	                	  String servletName = getServletName(servletRTs[z]);
    	                	  if (servletName.contains(serverletName1) || servletName.contains(serverletName2)){
    	                		   printValue("Servlet name",servletName);
    
    	                		   printValue("Servlet context path" ,
    	 	                        (String)connection.getAttribute(servletRTs[z],
    	 	                         "ContextPath"));
    		 	                    printValue("Invocation Total Count" ,
    		 		                        (Object)connection.getAttribute(servletRTs[z],
    		 		                         "InvocationTotalCount"));
    		 	                   printValue("ExecutionTimeHigh",
    		 		 	                        (Object)connection.getAttribute(servletRTs[z],
    		 		 	                         "ExecutionTimeHigh"));
    		 		                printValue("ExecutionTimeTotal",(Object)connection.getAttribute(servletRTs[z],
    		 	                         "ExecutionTimeTotal"));
    		 		                printValue("ExecutionTimeAverage",(Object)connection.getAttribute(servletRTs[z],
    		 		                		"ExecutionTimeAverage"));
    	 		               
    	                	  }
    	                    
    	                     
    	               
    	                  }
    	               }
    	            }
    	           }
    	         }
    	      }
    	   }
    	   
    	   private void printValue(String key,Object value){
    		   System.out.println("  " + key + " : " + value);
    	   }
    	    public static void main(String[] args) throws Exception {
    	    	 String hostname = "10.111.131.50";
    		      String portString = "7001";
    		      String username = "weblogic";
    		      String password = "weblogic123";
    		      PrintServerlet s = new PrintServerlet();
    		      initConnection(hostname, portString, username, password);
    		      s.getServletData();
    		      connector.close();
    	   }
    }
    

      

  • 相关阅读:
    C# 中数组、ArrayList、List<T> 区别
    启动SourceNavigator出错(问题解决)
    (转)SlickEdit软件使用
    ubuntu操作记录
    ubuntu下安装Source Insight
    Android中对于没有Looper的类,要使用Toast的问题
    (转)ubuntu下安装source navigator
    (转)深入理解之 Android Handler(相当好!!!)
    Git常用命令及思维导图
    (转)android的消息处理机制(图+源码分析)——Looper,Handler,Message
  • 原文地址:https://www.cnblogs.com/ahang/p/4460656.html
Copyright © 2020-2023  润新知