Python主机监控数据收集
原创 2016-08-23 智文 OpenSkill 收集服务器主机信息目的,方便一目了然的去查看,执行dmidecode 感觉比较乱。下面程序可以通过split函数等切片方式进行编写。 目前我想了解的信息是: 1、IP地址(vender) 2、服务器厂商(vender) 3、服务器型号(produ) 4、sn服务器序列号,sn我想显示10个字符 以下程序进行显示: #!/usr/bin/python from subprocess import Popen, PIPE def getIfconfig(): p = Popen([‘ifconfig’], stdout=PIPE) data = p.stdout.read() return data def getDmi(): p = Popen([‘dmidecode’], stdout=PIPE) data = p.stdout.read() return data def parseData(data): parsed_data = [] new_line = ” data = [i for i in data.split(‘\n’) if i] for line in data: if line[0].strip(): parsed_data.append(new_line) new_line = line+‘\n’ else: new_line += line+‘\n’ parsed_data.append(new_line) return [i for i in parsed_data if i] def parseIfconfig(parsed_data): dic = {} parsed_data = [i for i in parsed_data if not i.startswith(‘lo’)] for lines in parsed_data: line_list = lines.split(‘\n’) devname = line_list[0].split()[0] macaddr = line_list[0].split()[-1] ipaddr = line_list[1].split()[1].split(’:’)[1] break dic[‘ip’] = ipaddr return dic def parseDmi(parsed_data): dic = {} parsed_data = [i for i in parsed_data if i.startswith(‘System Information’)] parsed_data = [i for i in parsed_data[0].split(‘\n’)[1:] if i] dmi_dic = dict([i.strip().split(’:’) for i in parsed_data]) dic[‘vender’] = dmi_dic[‘Manufacturer’].strip() dic[‘produ’] = dmi_dic[‘Product Name’].strip() dic[‘sn’] = dmi_dic[‘Serial Number’].strip()[:10] return dic if name == ‘main’: data_ip = getIfconfig() parsed_data_ip = parseData(data_ip) print parseIfconfig(parsed_data_ip) data_dmi = getDmi() parsed_data_dmi = parseData(data_dmi) print parseDmi(parsed_data_dmi) [root@Master day5]# ./collect_info_bak.py {‘ip’: ‘192.168.83.169’} {‘vender’: ‘VMware, Inc.’, ‘produ’: ‘VMware Virtual Platform’, ‘sn’: ‘VMware-56 ’} 接下来我想收集更多的服务器主机信息: 1、主机名:hostname 2、IP地址: ip 3、操作系统版本: osver 4、服务器厂商: vender 5、服务器型号: product 6、服务器序列号: sn 7、CPU型号: cpu_model 8、CPU核数: cpu_num 9、内存大小: memory 实现方法如下: #!/usr/bin/python from subprocess import Popen, PIPE def getIfconfig(): p = Popen([‘ifconfig’], stdout=PIPE) data = p.stdout.read() return data def getDmi(): p = Popen([‘dmidecode’], stdout=PIPE) data = p.stdout.read() return data def parseData(data): parsed_data = [] new_line = ” data = [i for i in data.split(‘\n’) if i] for line in data: if line[0].strip(): parsed_data.append(new_line) new_line = line+‘\n’ else: new_line += line+‘\n’ parsed_data.append(new_line) return [i for i in parsed_data if i] def parseIfconfig(parsed_data): dic = {} parsed_data = [i for i in parsed_data if not i.startswith(‘lo’)] for lines in parsed_data: line_list = lines.split(‘\n’) devname = line_list[0].split()[0] macaddr = line_list[0].split()[-1] ipaddr = line_list[1].split()[1].split(’:’)[1] break dic[‘ip’] = ipaddr return dic def parseDmi(parsed_data): dic = {} parsed_data = [i for i in parsed_data if i.startswith(‘System Information’)] parsed_data = [i for i in parsed_data[0].split(‘\n’)[1:] if i] dmi_dic = dict([i.strip().split(’:’) for i in parsed_data]) dic[‘vender’] = dmi_dic[‘Manufacturer’].strip() dic[‘produ’] = dmi_dic[‘Product Name’].strip() dic[‘sn’] = dmi_dic[‘Serial Number’].strip()[:10] return dic def getHostname(f): with open(f) as fd: for line in fd: if line.startswith(‘HOSTNAME’): hostname = line.split(’=’)[1].strip() break return {‘hostname’:hostname} def getOSver(f): with open(f) as fd: for line in fd: osver = line.strip() break return {‘osver’:osver} def getCpu(f): num = 0 with open(f) as fd: for line in fd: if line.startswith(‘processor’): num += 1 if line.startswith(‘model name’):
print line cpu_model = line.split(’:’)[1].split() cpu_model = cpu_model[0]+’ ‘+cpu_model[-1] return {‘cpu_num’:num, ‘cpu_model’:cpu_model} def getMemory(f): with open(f) as fd: for line in fd: if line.startswith(‘MemTotal’): mem = int(line.split()[1].strip()) break mem = “%s” % int(mem/1024.0)+‘M’ return {‘memory’:mem} if name == ‘main’: dic = {} data_ip = getIfconfig() parsed_data_ip = parseData(data_ip) ip = parseIfconfig(parsed_data_ip) data_dmi = getDmi() parsed_data_dmi = parseData(data_dmi) dmi = parseDmi(parsed_data_dmi) hostname = getHostname(‘/etc/sysconfig etwork’) osver = getOSver(‘/etc/issue’) cpu = getCpu(‘/proc/cpuinfo’) mem = getMemory(‘/proc/meminfo’) dic.update(ip) dic.update(dmi) dic.update(hostname) dic.update(osver) dic.update(cpu) dic.update(mem) print dic 这样以后整理资产的时候可以清楚的了解到每台机器的情况了