自写weblogic监控、自动线程转储、上传ftp、发短信、语音报警、问题记录

实现功能内容:手动配置weblogic控制台用户名和密码,自动监控weblogic独占或者粘滞,自动转储问题线程,自动上传转储线程日志,自动实现发送短信,自动实现中文语音播报。

需要监控的weblog控制台 config.xml

一个控制台管理多个服务器上的多个节点。

<?xml version="1.0" encoding="gb2312"?>
<monitor>
	<weblogics>
		<weblogic name="hxhd" ip="137.12.1.101" port="9901" username="weblogic"
			password="JShxhd185">
			<node>
				<name>hxhd_jlsw_svr001,hxhd_jlsw_svr002,hxhd_jlsw_svr003,hxhd_jlsw_svr004</name>
				<ip>137.12.1.101</ip>
				<username>weblogic</username>
				<password>SC4456</password>
			</node>
			<node>
				<name>hxhd_jlsw_svr005,hxhd_jlsw_svr006,hxhd_jlsw_svr007,hxhd_jlsw_svr008</name>
				<ip>137.12.1.102</ip>
				<username>weblogic</username>
				<password>SC4456</password>
			</node>
			<node>
				<name>hxhd_jlsw_svr009,hxhd_jlsw_svr010,hxhd_jlsw_svr011,hxhd_jlsw_svr012</name>
				<ip>137.12.1.103</ip>
				<username>weblogic</username>
				<password>SC4456</password>
			</node>
		</weblogic>
	</weblogics>
</monitor>

整个监控程序采用服务器与客户端模式,服务器生成问题节点的线程信息,推送给客户端报警,同时转储问题线程,发送短信。

package com.css.monitor;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

import org.apache.log4j.Logger;

public class MultiServer {
	static Logger log = Logger.getLogger(MultiServer.class);

	public static void main(String[] args) {
		try {
			log.info("创建服务器端的ServerSocket对象,等待客户端连接-------------------------");
			ServerSocket serverSocket = new ServerSocket(6666);
			// 2.创建线程池,从而可以处理多个客户端
			ThreadPoolExecutor ThreadPoolExecutor = (java.util.concurrent.ThreadPoolExecutor) Executors
					.newFixedThreadPool(10);
			ScheduledThreadPoolExecutor ScheduledThreadPoolExecutor = (ScheduledThreadPoolExecutor) Executors
					.newScheduledThreadPool(1);
			ScheduledThreadPoolExecutor.scheduleAtFixedRate(new ServerTestTask(), 1, 3, TimeUnit.SECONDS);

			ThreadPoolExecutor.execute(new ThreadMonitor());

			for (int i = 0; i < 10; i++) {
				// 3.侦听客户端
				Socket socket = serverSocket.accept();
				log.info("有新的客户端加入-----------------------");
				// 4.启动线程
				log.info("服务端启动线程监听begin--------------------");
				System.out.println("getActiveCount:" + ThreadPoolExecutor.getActiveCount());
				System.out.println("getCompletedTaskCount:" + ThreadPoolExecutor.getCompletedTaskCount());
				System.out.println("getCorePoolSize:" + ThreadPoolExecutor.getCorePoolSize());
				System.out.println("getLargestPoolSize:" + ThreadPoolExecutor.getLargestPoolSize());
				System.out.println("getPoolSize:" + ThreadPoolExecutor.getPoolSize());
				System.out.println("getTaskCount:" + ThreadPoolExecutor.getTaskCount());
				ServerListener r = new ServerListener(socket);
				ThreadPoolExecutor.execute(r);
				System.out.println("服务端启动线程监听end--------------------");
			}
			// 5.关闭线程池
			ThreadPoolExecutor.shutdown();
			// 6.关闭服务器
			serverSocket.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

服务器端运行MultiServer类的主方法,采用线程池的方式管理,通过ServerSocket启动服务器6666端口,客户端监听这个端口实现数据传输。

ThreadMonitor 主要实现服务器端线程监控工作。

ServerListener 主要实现服务器端监听客户端连接工作。最多可以监控10个客户端同时连接。

ServerTestTask 主要实现服务器端监听客户端是否断开,维护客户端连接工作。

ParserForXml 主要实现服务器端解析config.xml,并建立与weblogic控制台的连接,保存到JMXmap静态变量里面。

ThreadDump 主要实现服务器端自动线程转储,通过远程登录方式实现执行服务器shell脚本。

RemoteInvokeShell(
				"137.12.74.44",
				22,
				"weblogic",
				"SChxhd@4456",
				"sh /weblogic/Oracle/Middleware/user_projects/domains/zc.sh hxhd_jlsw_svr001 sdfsdfsd");
	}

服务器的功能类CodeUtil和ShortMsgUtil 主要实现发送短信功能,前台需要有短信平台支持。

DBoption主要实现服务器端对异常线程做记录。

zc.sh 此文件需要提前放到 应用服务器中,指定位置(/weblogic/Oracle/Middleware/user_projects/domains/zc.sh)用户自动转储文件、自动上传ftp服务器(前提需要自行搭建ftp服务器)。

客户端需要执行MultiClient类实现语音报警。

ClientReadServer 主要实现客户端接收服务器端传来的问题节点。通知运维人员处理。

客户端使用了jacob 这个东西可以实现文字转语音的功能。

 注意32位 和64位windows 客户端需要注册 2个dll文件。

nodeName.properties 文件为weblogic节点名称的中文对照。

ClientSendServer 主要实现客户端与服务器简单交互功能。

ClientTestTask 主要目的是客户端不停的发送信息到服务器,防止客户端掉线问题。

singel 文件夹 暂时未用到不用做考虑。

整个目录结构为:

 最后运行程序时候建议打包成2个jar包,服务器一个jar,客户端一个jar

 本文片段代码在网上查找,整个业务处理流程及其代码整合过程完成自行书写。

祝君时效运维、开心运维。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

低调无畏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值