通过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();
       }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值