最近部门在做Tomcat服务器监控,数据采集的工作交到了我这个实习生的头上。
通过tomcat manager采集数据首先要配置tomcat角色,这个不多说了,配置文件改下就可以了。
关于数据采集,大部分数据可以通过“http://localhost:8080/manager/status?XML=true”这个请求到xml数据,之后再解析xml数据就可以获取到需要的数据。
还有一小部分是“Servlet”的相关信息,这个是无法通过上面的请求获取的,可以通过下面这个请求获取:
http://localhost:8080/manager/jmxproxy?qry=*%3Aj2eeType%3DServlet%2C*
但是这个请求获取的是纯文本,所以就需要自己解析数据。于是就花时间写了个解析Tomcat 中Servlet相关信息的程序。
主要代码结构:
getconnectUtil.java(用来进行登录):
package util;
import sun.misc.BASE64Encoder;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
public class getConnectUtil {
public String login(String Servleturl,String username,String password) throws IOException {
//查询服务器信息url
String result=null;
String line=null;
URL url=new URL(Servleturl);
URLConnection conn =url.openConnection();
String UserNameAndPassWord=username+":"+password;
String encodedPassword=new BASE64Encoder().encode(UserNameAndPassWord.getBytes());
conn.setRequestProperty("Authorization", "Basic " + encodedPassword);
InputStream is=conn.getInputStream();
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(is));
while((line=bufferedReader.readLine())!=null){
result+=line+"\n";
}
return result;
}
}
ServletDataSplitUtil.java(进行截取字段):
package util;
import model.ServletInfoModel;
import java.io.IOException;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ServletDataSplitUtil {
private static ArrayList<ServletInfoModel> list = new ArrayList<>();
public ArrayList<ServletInfoModel> DataSplit(String url, String username, String password) throws IOException {
String result = new GetConnectUtil().login(url, username, password);
String[] ss = result.split("\n");
ServletInfoModel servletInfoModel = new ServletInfoModel();
int count = 0;
for (int i = 1; i < ss.length; i++) {
String WebApplicationName = null;