通过JMX获取weblogic的监控指标

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
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的监控:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
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的监控:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
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的监控:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
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();
        }
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值