python+shell 批量获取服务器信息并且生成excel表
来源:互联网 发布:反贪风暴 知乎 编辑:程序博客网 时间:2024/06/06 03:53
我们工作中,经常需要获取服务器的一些信息,包括软件的和硬件的。例如刚刚接收的服务器,需要批量获取信息确认硬件配置是否符合我们需求,或者维护很长时间的服务器,中间变动了很多,但是服务器信息没有更改,这个时候也需要进行信息核对等等。基于以上这些需求,我写了一个脚本,用shell批量获取远程服务器的信息保存到一个结果,然后用python进行解析,生成excel表。以下是具体步骤:
- 配置ssh免密码登录,或者不配置请安装sshpass工具;
- 安装XlsxWriter模块,python需要调用这个模块来创建和生成excel表;
- shell脚本,根据ip列表批量去获取所需要的信息,保存到一个文件当中;
- python解析结果文件,生成所需要的excel表;
以下是具体的代码:
#批量获取信息#!/bin/bashdeclare -A RESULTRESULT=()function getinfo() {IP=$1OUTIP=$(ssh root@$IP -p 36000 "ifconfig eth0 |grep -w inet |cut -d':' -f2 |cut -d' ' -f1")HOSTNAME=$(ssh root@$IP -p 36000 'hostname')RELEASE=$(ssh root@$IP -p 36000 'cat /etc/redhat-release')CPU=$(ssh root@$IP -p 36000 "cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c")PYCPU_NUM=$(ssh root@$IP -p 36000 'grep "physical id" /proc/cpuinfo |sort |uniq |wc -l')CORE=$(ssh root@$IP -p 36000 "cat /proc/cpuinfo| grep cores| uniq | awk -F ':' '{print $2}'")logical=$(ssh root@$IP -p 36000 'cat /proc/cpuinfo| grep processor| wc -l')TYPE=$(ssh root@$IP -p 36000 'dmidecode -t 1|grep "Product Name" |cut -d: -f2')OS=$(ssh root@$IP -p 36000 'head -1 /etc/issue')INNERIP=$(ssh root@$IP -p 36000 "/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d 'addr:'")ST=$(ssh root@$IP -p 36000 'dmidecode -t 1|grep "Serial Number"|head -1|cut -d : -f2')VENDOR=$(ssh root@$IP -p 36000 'dmidecode -t 1|grep "Manufacturer"')MEM=$(ssh root@$IP -p 36000 "head -1 /proc/meminfo |cut -d: -f2 |sed 's/[ \t]*//g'")MEM_NUM=$(ssh root@$IP -p 36000 'dmidecode | grep -A16 "Memory Device$" |grep Size|sort |sed "s/^[ \t]*//g"| grep -v "No Module Installed" | wc -l')DISK=$(ssh root@$IP -p 36000 'fdisk -l|grep "Disk /dev"|cut -d, -f1')eth0_speed=$(ssh root@$IP -p 36000 "ethtool eth0 |grep Speed |awk '{print $2}' |sed 's/[ \t]*//g'")eth1_speed=$(ssh root@$IP -p 36000 "ethtool eth1 |grep Speed |awk '{print $2}' |sed 's/[ \t]*//g'")RESULT+=([$HOSTNAME]="$ST, $OUTIP, $IP, $PYCPU_NUM*$CPU, $MEM, $DISK, $OS, eth0 $eth0_speed|eth1 $eth1_speed, $TYPE")}cd /home/tencent_ops/testfor ip in `cat iplist|grep -v "^$" |grep -v "^#"`;do getinfo $ipdonefor key in $(echo ${!RESULT[*]});do echo "${RESULT[$key]}" >> result.txtdone
ip列表如下:
#iplist10.*.*.3310.*.*.3410.*.*.3510.*.*.36
思路:定义一个shell数据,将每台服务器获取的信息保存到数组中,然后遍历数组输出到result.txt中,结果是这样的:
#result.txt C4X***, 124.*.*.*, 10.*.*.*, 2* 32 Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz, 32762784kB, Disk /dev/sda: 1199.6 GB, CentOS release 6.2 (Final), eth0 Speed:1000Mb/s|eth1 Speed:1000Mb/s, PowerEdge R430 8W1V***, 124.*.*.*, 10.*.*.*, 2* 32 Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz, 32762784kB, Disk /dev/sda: 1199.6 GB, CentOS release 6.2 (Final), eth0 Speed:1000Mb/s|eth1 Speed:1000Mb/s, PowerEdge R430
具体需要获取的信息和格式,可以根据自己的需求更改脚本。
接下来是python脚本解析result.txt文件
#!/usr/bin/env python# -*-coding: utf-8 -*-import xlsxwriterimport reworkbook = xlsxwriter.Workbook('chart.xlsx')worksheet = workbook.add_worksheet()title = [u'Hostname', u'Service Tag', u'WAN IP', u'LAN IP', u'CPU', u'内存', u'硬盘', u'OS', u'网卡速率', u'Model']data=[]for line in open("result.txt"): list_info=re.split(',',line) data.append(list_info)format = workbook.add_format()format.set_border(1)format_title = workbook.add_format()format_title.set_border(1)format_title.set_bg_color('#99ffff')format_title.set_align('center')format_title.set_bold()format_ave = workbook.add_format()format_ave.set_border(1)format_ave.set_num_format('0.00')worksheet.write_row('A1', title, format_title)#worksheet.write_column('A2', buname, format)#worksheet.write_column('A2', data[0], format)#worksheet.write_row('B2', data[0], format)row = 1col = 1for num in range(len(data)): worksheet.write_row(row,col, data[num], format) row += 1workbook.close()
思路:读取result.txt文件到一个数组中,然后遍历数组数据,添加到excel表对应的行和列中去。
最终生成的结果如下:
阅读全文