python+shell 批量获取服务器信息并且生成excel表

我们工作中,经常需要获取服务器的一些信息,包括软件的和硬件的。例如刚刚接收的服务器,需要批量获取信息确认硬件配置是否符合我们需求,或者维护很长时间的服务器,中间变动了很多,但是服务器信息没有更改,这个时候也需要进行信息核对等等。基于以上这些需求,我写了一个脚本,用shell批量获取远程服务器的信息保存到一个结果,然后用python进行解析,生成excel表。以下是具体步骤:

  1. 配置ssh免密码登录,或者不配置请安装sshpass工具;
  2. 安装XlsxWriter模块,python需要调用这个模块来创建和生成excel表;
  3. shell脚本,根据ip列表批量去获取所需要的信息,保存到一个文件当中;
  4. python解析结果文件,生成所需要的excel表;

以下是具体的代码:

#批量获取信息
#!/bin/bash
declare -A RESULT
RESULT=()

function getinfo() {
IP=$1
OUTIP=$(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/test
for ip in `cat iplist|grep -v "^$" |grep -v "^#"`;do
    getinfo $ip
done

for key in $(echo ${!RESULT[*]});do
    echo "${RESULT[$key]}" >> result.txt
done

ip列表如下:

#iplist
10.*.*.33
10.*.*.34
10.*.*.35
10.*.*.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 xlsxwriter
import re

workbook = 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 = 1
col = 1
for num in range(len(data)):
    worksheet.write_row(row,col, data[num], format)
    row += 1

workbook.close()

思路:读取result.txt文件到一个数组中,然后遍历数组数据,添加到excel表对应的行和列中去。

最终生成的结果如下:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/linxi7/article/details/78893250