通过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(); } } |