Python主机监控数据收集 Tuesday, August 23, 2016 9:21 AM 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 这样以后整理资产的时候可以清楚的了解到每台机器的情况了
已使用 Microsoft OneNote 2016 创建。