QEMU宿主机基础信息采集脚本COLT_CMDB_linux_QEMU.sh
COLT_CMDB_linux_QEMU.sh
#!/bin/bash#QEMU 宿主机基础信息采集脚本#IT_BEGIN#IT_TYPE=1#普通指标#IT SYSTEM_qemu_IP|ip#IT SYSTEM_qemu_APIversion|APIversion#IT SYSTEM_qemu_CPUNum|CPUNum#IT SYSTEM_qemu_Architecture|Architecture#IT SYSTEM_qemu_CoreVersion|CoreVersion#IT SYSTEM_qemu_hostname|hostname#IT SYSTEM_qemu_cpumhz|cpumhz#IT SYSTEM_qemu_osversion|osversion#IT SYSTEM_qemu_VMNUM|VMNUM#IT SYSTEM_qemu_memsize|memsize#IT SYSTEM_qemu_productname|productname#IT SYSTEM_qemu_productserial|productserial#IT SYSTEM_qemu_productuuid|productuuid#IT_ENDshname=`basename$0` ATTR="_X(g=$shname,p=cmdb,t=script,f=0)"#多指标输出开始echoCOL_DETAIL_START: get_ip(){local ips=""ifcommand-v ip >/dev/null 2>&1;then ips=$(ip-o-4 addr show scope global 2>/dev/null \|awk'{print $4}'|cut-d'/'-f 1|paste-sd','-)elif command-v ifconfig >/dev/null 2>&1;then ips=$(ifconfig-a 2>/dev/null \|awk'/inet / && !/127\.0\.0\.1/ {gsub(/addr:/,"",$2); print $2}'\|paste-sd','-)fiecho"$ips"}ip=$(get_ip)#QEMU版本(作为API版本)get_qemu_version(){local bin verforbin in qemu-system-x86_64 qemu-kvm/usr/libexec/qemu-kvm;doifcommand-v"$bin">/dev/null 2>&1||[-x"$bin"];then ver=`"$bin"--version 2>/dev/null|head-1|grep-oP'version \K[0-9.]+'`[-n"$ver"]&&{echo"$ver";return;}fi doneecho""}APIversion=`get_qemu_version`#cpu个数CPUNum=`nproc 2>/dev/null||lscpu|awk-F:'/^CPU\(s\)/{gsub(/ /,"",$2);print $2}'`#虚机数量(统计运行中的QEMU进程数)ifcommand-v qm >/dev/null 2>&1;then# PVE 环境,最准确VMNUM=$(qm list 2>/dev/null|awk'NR>1 && $3=="running"'|wc-l)elif pgrep-f'^(/usr/bin/)?(kvm|qemu-system[^ ]*) '>/dev/null 2>&1;then# 通用 KVM 环境,按主进程计数VMNUM=$(pgrep-f'^(/usr/bin/)?(kvm|qemu-system[^ ]*) '|wc-l)elseVMNUM=0 fi#宿主机位数Architecture=`uname-m`#宿主机内核版本CoreVersion=`uname-r`#cpu MHZget_cpumhz(){local mhz=""# 1. lscpu(兼容有无空格)mhz=$(lscpu 2>/dev/null|awk-F:'/^[[:space:]]*CPU MHz/{gsub(/^[ \t]+|[ \t]+$/,"",$2);print $2;exit}')# 2. /proc/cpuinfoif[-z"$mhz"];then mhz=$(awk-F': ''/^cpu MHz/{print $2;exit}'/proc/cpuinfo 2>/dev/null)fi# 3. sysfs cpufreq(最可靠,很多服务器只在这里有)if[-z"$mhz"];then local fforf in/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq \/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq;doif[-r"$f"];then mhz=$(awk'{printf "%.0f", $1/1000}'"$f")breakfi done fiecho"$mhz"}cpumhz=$(get_cpumhz)#宿主机OS版本osversion=`uname-n` product_name=`cat/sys/class/dmi/id/product_name 2>/dev/null` product_serial=`cat/sys/class/dmi/id/product_serial 2>/dev/null` product_uuid=`cat/sys/class/dmi/id/product_uuid 2>/dev/null`#内存#memsize=`free|grep Mem|awk '{print $2}'`memsize=`free-m|awk'/^Mem:/{print $2}'`echo"ip[$ATTR]|+|$ip"echo"APIversion[$ATTR]|+|$APIversion"echo"CPUNum[$ATTR]|+|$CPUNum"echo"VMNUM[$ATTR]|+|$VMNUM"echo"Architecture[$ATTR]|+|$Architecture"echo"CoreVersion[$ATTR]|+|$CoreVersion"echo"cpumhz[$ATTR]|+|$cpumhz"echo"hostname[$ATTR]|+|`hostname`" echo "memsize[$ATTR]|+|$memsize" echo "productname[$ATTR]|+|$product_name" echo "productserial[$ATTR]|+|$product_serial" echo "productuuid[$ATTR]|+|$product_uuid"#多指标输出结束echoCOL_DETAIL_END:在服务器执行结果如下:
root@pve:~# sh COLT_CMDB_linux_QEMU.shCOL_DETAIL_START: ip[_X(g=COLT_CMDB_linux_QEMU.sh,p=cmdb,t=script,f=0)]|+|172.16.20.121 APIversion[_X(g=COLT_CMDB_linux_QEMU.sh,p=cmdb,t=script,f=0)]|+|9.0.2 CPUNum[_X(g=COLT_CMDB_linux_QEMU.sh,p=cmdb,t=script,f=0)]|+|384 VMNUM[_X(g=COLT_CMDB_linux_QEMU.sh,p=cmdb,t=script,f=0)]|+|21 Architecture[_X(g=COLT_CMDB_linux_QEMU.sh,p=cmdb,t=script,f=0)]|+|x86_64 CoreVersion[_X(g=COLT_CMDB_linux_QEMU.sh,p=cmdb,t=script,f=0)]|+|6.8.12-8-pve cpumhz[_X(g=COLT_CMDB_linux_QEMU.sh,p=cmdb,t=script,f=0)]|+|2400.000 hostname[_X(g=COLT_CMDB_linux_QEMU.sh,p=cmdb,t=script,f=0)]|+|pve memsize[_X(g=COLT_CMDB_linux_QEMU.sh,p=cmdb,t=script,f=0)]|+|386467 productname[_X(g=COLT_CMDB_linux_QEMU.sh,p=cmdb,t=script,f=0)]|+|NF5280-A7-A0-R0-00 productserial[_X(g=COLT_CMDB_linux_QEMU.sh,p=cmdb,t=script,f=0)]|+|21C137669 productuuid[_X(g=COLT_CMDB_linux_QEMU.sh,p=cmdb,t=script,f=0)]|+|d55888ee-9f8a-11ee-b5a5-9cc2c462ab10 COL_DETAIL_END: