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