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 创建。