Sunday, September 9, 2012

Monitor Weblogic using WLST in java


Here is the code i used to monitor the weblogic server details written in java using WLST. At times the weblogic console doesnt respond or is very slow. The script helps getting the important data needed during issues and help monitoring the server.

Main parameters that we normally want to monitor :
- JVM Stats
- JMS stats
- JTA stats
- Thread Pool
- Deployed Application state

Here goes the java file , it fetches this data and writes to a text file.

Utility method to write the data to file
   public static void writeFile(StringBuffer data) {
     try {
       FileWriter outFile = new FileWriter("C:\\ServerStats\\serverinfo.txt");
       BufferedWriter out = new BufferedWriter(outFile);
       out.write(data.toString());
       out.close(); 
     }catch(Exception e){e.printStackTrace();}
  }

Main code to fetch server info :
The code is pretty simple and additional code for other parameters can be added easily. 

  
  StringBuffer data= new StringBuffer("Data");
            MBeanHome home = null;
           String url = "t3://serverurl:port";
           String username = "weblogic";
           String password = "welcome1";


            try {
                Environment env = new Environment();
                env.setProviderUrl(url);
                env.setSecurityPrincipal(username);
                env.setSecurityCredentials(password);
                Context ctx = env.getInitialContext();
                home = (MBeanHome) ctx.lookup(MBeanHome.ADMIN_JNDI_NAME);
            } catch (Exception e) {System.out.println("Exception caught: " + e);}

            
            try {
            
                data.append("DOMAIN NAME :  " +  home.getActiveDomain().getName() +"\n");
               
            } catch (Exception e) {System.out.println("Exception: " + e);}
           
           Set mbeanSet = home.getMBeansByType("ServerRuntime");
           data.append("Number of servers in the domain: " + mbeanSet.size() +"\n");
           
            
            Iterator mbeanIterator = mbeanSet.iterator();
            int cls=1;
            while(mbeanIterator.hasNext()) {
                ServerRuntimeMBean serverRuntime =  (ServerRuntimeMBean)mbeanIterator.next();
                
              if(cls==1)
              {
              try{
              ClusterRuntimeMBean clusterruntime = serverRuntime.getClusterRuntime();
              data.append("------------- CLUSTER INFORMATION---------------" + "\n");    
              data.append("1. Cluster Name :  "+clusterruntime.getName()+"\n");
              data.append("2. Cluster MulticastMessagesLostCount : "+clusterruntime.getMulticastMessagesLostCount()+"\n");
              data.append("3. Cluster Server Names  "+"\n"); 
                  for(int j=0;j<clusterruntime.getServerNames().length;j++) {
                    data.append(" Server :  "+(clusterruntime.getServerNames())[j] + "\n");
                  }
                  
              data.append("---------------------------------------------------------------------------- "+"\n");    
              }catch(Exception e){e.printStackTrace();}
              }  
              
              
              //if(cls==1)
              //{
              try{
                data.append("------------- WEB SERVER INFORMATION---------------" + "\n");  
              WebServerRuntimeMBean[] webserverruntime = serverRuntime.getWebServerRuntimes();
                
              for(int j=0;j<webserverruntime.length;j++) {
                data.append("1. Web server info : Web server Names  "+webserverruntime[j].getWebServerName()+"\n");
               
              }
                data.append("---------------------------------------------------------------------------- "+"\n");
              }catch(Exception e){e.printStackTrace();}
         
         
                   
            if(serverRuntime.getState().equals(ServerStates.RUNNING)){
              data.append("---------------------------------------------------------------------------- "+"\n");
              data.append(" INFO STARTS FOR SERVER "+serverRuntime.getName()+" ******"+"\n");
              data.append("---------------------------------------------------------------------------- "+"\n");
                     data.append("1. Server Name = " + serverRuntime.getName()+"\n");
                     data.append("2. Server ListenAddress = " +  serverRuntime.getListenAddress()+"\n");
                     data.append("3. Server ListenPort = " +  serverRuntime.getListenPort()+"\n");
                     data.append("4. Admin server Host = " +  serverRuntime.getAdminServerHost()+"\n");
                     data.append("5. Health state = " +  serverRuntime.getHealthState()+"\n");
                                    
                  data.append("---------------------------------------------------------------------------- "+"\n");
                  data.append(" JVM Parameters For SERVER "+serverRuntime.getName()+"\n");
                  data.append("---------------------------------------------------------------------------- "+"\n");
                  JVMRuntimeMBean jvmruntime = serverRuntime.getJVMRuntime();
                  data.append("1. JVM Current Heap size = " + jvmruntime.getHeapSizeCurrent()+"\n");
                  data.append("2. JVM  Heap free Current  = " + jvmruntime.getHeapFreeCurrent()+"\n");
                  data.append("3. JVM  Heap free Percent = " + jvmruntime.getHeapFreePercent()+"%"+"\n");
                  data.append("4. JVM  Heap size max = " + jvmruntime.getHeapSizeMax()+"\n");
                  data.append("5. JVM  JavaVersion = " + jvmruntime.getJavaVersion()+"\n");
                  data.append("6. JVM  JavaVendor = " + jvmruntime.getJavaVendor()+"\n");
              
                  try{
                    ExecuteQueueRuntimeMBean[] executeQueueRuntime =serverRuntime.getExecuteQueueRuntimes();
                    data.append("---------------------------------------------------------------------------- "+"\n");
                    data.append(" Execute Queue Runtime parameters "+"\n");
                    data.append("---------------------------------------------------------------------------- "+"\n");
                      for(int j =0;j<executeQueueRuntime.length;j++)
                      {
                        data.append("1. Execute Queue ThreadTotalCount =  "+executeQueueRuntime[j].getExecuteThreadTotalCount()+"\n");  
                        data.append("2. Execute Queue ThreadCurrentIdleCount =  "+executeQueueRuntime[j].getExecuteThreadCurrentIdleCount()+"\n");
                        data.append("3. Pending RequestCurrentCount =  "+executeQueueRuntime[j].getPendingRequestCurrentCount()+"\n");  
                        data.append("4. PendingRequestOldestTime =  "+executeQueueRuntime[j].getPendingRequestOldestTime()+"\n");  
                      }
                      
                  }catch(Exception e){e.printStackTrace();}
                  
                  
                  
                  data.append("---------------------------------------------------------------------------- "+"\n");                
                  data.append("  JTA STATS FOR SERVER "+serverRuntime.getName() +"\n");
                  data.append("---------------------------------------------------------------------------- "+"\n");
                  JTARuntimeMBean jtaruntime= serverRuntime.getJTARuntime();
                  
                   data.append( "1. Total Trx = " + jtaruntime.getActiveTransactionsTotalCount()+"\n");
                   data.append( "2. Total Abondened Trx = " + jtaruntime.getTransactionAbandonedTotalCount()+"\n");
                   data.append( "3. Total Commited Trx = " + jtaruntime.getTransactionCommittedTotalCount()+"\n");
                   
                                     
                  data.append("---------------------------------------------------------------------------- "+"\n");
                  data.append(" JMS Parameters FOR SERVER  "+serverRuntime.getName()+"\n");
                  data.append("---------------------------------------------------------------------------- "+"\n");
                  
                  JMSRuntimeMBean jmsruntime= serverRuntime.getJMSRuntime();
                  JMSServerRuntimeMBean[] jmsservers= jmsruntime.getJMSServers();
                  
                  for(int i=0;i<jmsservers.length;i++)
                  {
                     data.append( "1. JMS Server Name = "+jmsservers[i].getName()+"\n");
                     data.append( "2. MessagesHighCount = "+jmsservers[i].getMessagesHighCount()+"\n");
                     data.append( "3. MessagesPendingCount = "+jmsservers[i].getMessagesPendingCount()+"\n");
                     data.append( "3. DestinationsCurrentCount = "+jmsservers[i].getDestinationsCurrentCount()+"\n"); 
                    
                  }
                  data.append("4. JMS Health : " + jmsruntime.getHealthState()+"\n");

                  data.append("---------------------------------------------------------------------------- "+"\n");
         
                  data.append("---------------------------------------------------------------------------- "+"\n");
                  data.append(" Application Runtime Data FOR SERVER  "+serverRuntime.getName()+"\n");
                  data.append("---------------------------------------------------------------------------- "+"\n");
                  
                 ApplicationRuntimeMBean[] appruntime = serverRuntime.getApplicationRuntimes();
                 for(int j=0;j<appruntime.length;j++)
                 {
                   if(appruntime[j].isEAR())  
                   {
                    data.append("Application Name : " +appruntime[j].getApplicationName() +"\n");
                    data.append("Application Name : " +appruntime[j].getHealthState() +"\n");
                   }
                 }

                 // ThreadPoolRuntimeMBean tpoolruntime=serverRuntime.getThreadPoolRuntime();
                    data.append(" INFO ENDS FOR SERVER "+serverRuntime.getName() +"\n");
                  
                                                       
                }
              cls++;
            }//while ends
            
            writeFile(data);


-----------------------------------------------------------------------------------
You will find file : serverinfo.txt at C:\ServerStats.


Thanks !!