1、项目中需要检测到几台远程服务器的参数,差了很多资料,决定用的这个
2、jar包:ganymed-ssh2-build210.jar
3、原理:向远程linux服务器发送脚本命令,得到该台服务器的信息
4、代码如下:
public class Basic { public static void main(String[] args) { String hostname1 = ""; String username1 = ""; String password1 = ""; String hostname2 = ""; String username2 = ""; String password2 = ""; String hostname3 = ""; String username3 = ""; String password3 = ""; /** * 服务器1 */ Montor montor1 = getMontor(hostname1, username1, password1); /** * 服务器2 */ Montor montor2 = getMontor(hostname2, username2, password2); /** * 服务器3 */ Montor montor3 = getMontor(hostname3, username3, password3); System.out.println(montor1.toString()); System.out.println(montor2.toString()); System.out.println(montor3.toString()); } private static Montor getMontor(String hostname, String username, String password) { Montor montor = null; try { Connection conn = new Connection(hostname); conn.connect(); boolean isAuthenticated; isAuthenticated = conn.authenticateWithPassword(username, password); if (isAuthenticated == false) throw new IOException("Authentication failed."); montor = new Montor(); montor.setHostName(exec(conn, "hostname")); montor.setDiskSpace(exec(conn, "df -h | awk ‘NR==2 {print $2}‘")); montor.setUserSpace(exec(conn, "df -h | awk ‘NR==2 {print $3}‘")); montor.setRemainingSpace(exec(conn, "df -h | awk ‘NR==2 {print $4}‘")); montor.setMemory(exec(conn, "free -m | awk ‘NR==2 {print $2}‘")); montor.setUseMemory(exec(conn, "free -m | awk ‘NR==2 {print $3}‘")); montor.setRemainingMemory(exec(conn, "free -m | awk ‘NR==2 {print $4}‘")); BigDecimal b1 = new BigDecimal(exec(conn, "free -m | awk ‘NR==2 {print $3}‘")); BigDecimal b2 = new BigDecimal(exec(conn, "free -m | awk ‘NR==2 {print $2}‘")); montor.setUsageMemory((b1.divide(b2, 2, BigDecimal.ROUND_HALF_UP)) .doubleValue() * 100 + "%"); conn.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return montor; }; /** * * @param conn 连接 * @param command 执行的sheel命令 * @return */ private static String exec(Connection conn, String command) { String data = ""; try { Session sess = conn.openSession(); //执行命令 sess.execCommand(command); InputStream stdout = new StreamGobbler(sess.getStdout()); BufferedReader br = new BufferedReader( new InputStreamReader(stdout)); while (true) { String line = br.readLine(); if (line == null) break; data = line; } br.close(); sess.close(); } catch (IOException e) { e.printStackTrace(System.err); System.exit(2); } return data; } }
5、目前还需要服务器中各项服务的联通性,如tomcat,active-mq等服务 是否挂机,如有大婶知道,望告知
6、如果还有其他更好的方式望周知。
时间: 2024-10-07 21:59:17