1.查询所有的主机(运行和未运行的):
[root@localhost ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
1 bg-119 running
2 bg-120 running
3 bg-121 running
4 bg-132 running
- bg-122 关闭
- bg-239 关闭
- bg-240 关闭
- bg-241 关闭
- centos7 关闭
2.查询单个的某台主机的基本信息:
[root@localhost ~]# virsh dominfo bg-119
Id: 1
名称: bg-119
UUID: bb8e2dab-111f-4151-****-924ec2f7376b
OS 类型: hvm
状态: running
CPU: 4
CPU 时间: 112076.1s
最大内存: 16777216 KiB
使用的内存: 16777216 KiB
持久: 是
自动启动: 禁用
管理的保存: 否
安全性模式: none
安全性 DOI: 0
3.java中通过ssh调用shell命令获取数据:
3.1 maven添加jsch的jar包
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.53</version>
</dependency>
3.2 java代码(shell命令返回的数据为字符串,通过一些列解析获取对应值)
package com.mdl;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import com.google.gson.Gson;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;
import com.purvar.vo.KVM;
public class JSchUtils {
private static JSch jsch;
private static Session session;
/**
* 连接到指定的IP
*
* @throws JSchException
*/
public static void connect(String user, String passwd, String host, int port) throws JSchException {
jsch = new JSch();// 创建JSch对象
session = jsch.getSession(user, host, port);// 根据用户名、主机ip、端口号获取一个Session对象
session.setPassword(passwd);// 设置密码
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);// 为Session对象设置properties
session.connect();// 通过Session建立连接
}
/**
* 关闭连接
*/
public static void close() {
session.disconnect();
}
/**
* 执行相关的命令
*
* @throws JSchException
*/
public static String execCmd(String command) throws JSchException {
String resultStr = "";
BufferedReader reader = null;
Channel channel = null;
try {
if (command != null) {
channel = session.openChannel("exec");
((ChannelExec) channel).setCommand(command);
// ((ChannelExec) channel).setErrStream(System.err);
channel.connect();
InputStream in = channel.getInputStream();
reader = new BufferedReader(new InputStreamReader(in));
String buf = null;
while ((buf = reader.readLine()) != null) {
resultStr = resultStr + "\n" + buf;
System.out.println("resultStr---" + resultStr);
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (JSchException e) {
e.printStackTrace();
} finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
channel.disconnect();
}
return resultStr;
}
public static void main(String[] args) throws SftpException {
try {
// 1.连接到指定的服务器
connect("root", "mdl_12345", "172.*.*.45", 22);
// 2.执行相关的命令,获取主机名称list
String hostsStr = execCmd("virsh list");
List<String> hostNameList = getHostNameList(hostsStr);
List<KVM> hostInfoList = new ArrayList<KVM>();
// 3.执行相关的命令,获取每台主机基本信息
for(int i=0;i<hostNameList.size();i++){
String commandStr = "virsh dominfo" + " " + hostNameList.get(i);
String hostInfoStr = execCmd(commandStr);
hostInfoList.add(getHostBaseInfo(hostInfoStr));
}
Gson gs = new Gson();
String mStr = gs.toJson(hostInfoList);
System.out.println(mStr);
// 4.关闭连接
close();
} catch (JSchException e) {
e.printStackTrace();
}
}
/**
* 返回主机名的list
* @param str
* @return
*/
private static List<String> getHostNameList(String str){
String[] strArr = str.split("\\n");
List<String> hostList = new ArrayList<String>();
List<String> mList;
for(int j=3;j<strArr.length;j++){
mList = new ArrayList<String>();
String[] arr = strArr[j].split(" ");
for(int i=0;i<arr.length;i++){
if(!arr[i].equals("")){
mList.add(arr[i]);
}
}
hostList.add(mList.get(1));
}
return hostList;
}
/**
* 返回主机的基本信息
* @param str
* @return
*/
private static KVM getHostBaseInfo(String str){
KVM kvm = new KVM();
String[] strArr = str.split("\\n");
kvm.setUuid(formatStr(strArr[3]));
kvm.setInstanceRunningId(formatStr(strArr[1]));// 运行时ID
kvm.setInstanceName(formatStr(strArr[2]));// 虚拟机实例名称
kvm.setInstanceState(formatStr(strArr[5]));// 虚拟机状态
kvm.setOSType(formatStr(strArr[4]));// 系统类型
kvm.setCPUNumber(formatStr(strArr[6]));// CPU数量(个)
kvm.setCPUTime(formatStr(strArr[7]));// CPU时间(s)
kvm.setMAXMemory(formatStr(strArr[8]));// 最大使用内存
kvm.setMemoryUsed(formatStr(strArr[9]));// 已用内存
// String DiskNumber = "";//硬盘数量(个)
return kvm;
}
/**
* 去除字符串中间的空格 将中文:替换为英文:
*
* @param str
* @return
*/
private static String formatStr(String str) {
String result;
if (str.indexOf(":") > 0) {
result = str.replaceAll(" ", "").replaceAll(":", ":");
} else {
result = str.replaceAll(" ", "");
}
return result.split("\\:")[1];
}
}