Java获取weblogic节点_通过JMX获取weblogic的监控指标

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

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

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的监控:

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的监控:

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

ObjectName[] applicationRT = getApplicationRuntimes(serverRT[i]);

int length_app = (int)applicationRT.length;

for(int y = 0;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

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的监控:

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值