利用shell脚本“综合、集中”查看linux server常用软硬件信息

简介:

    作为运维人员,了解每台服务器的硬件相关信息以及系统相关配置是必不可少的工作。虽然不难,却很零散,信息集中度不高。故而做了做了一套集中展示以上信息的“平台”(其实谈不上平台,收集-整理-展示而已),其原理由一台“监控机”(暂且这么叫吧)运行主脚本,根据记录服务器IP的文件循环处理每台server;配合“被监控机”上的两个awk文件(awk规则),将信息统一收集到“监控机”然后由web server进行展示,界面大致如下面图例。

    #注:web server需开启目录访问功能

    首页页面,所有的服务器都会以一个目录的形式显示,目录内包含该server相关信息

wKioL1X8McCjRIqFAADoR30YaUA273.jpg

    选中某台server后,进入二级页面,分别记录了任务计划/硬件信息/防火墙设置/root-shell为本人习惯存放shell脚本的目录/sys_conf为系统常用配置文件

wKioL1X8MmGgp86iAAElZbahbV8281.jpg

    其中,devinfo.txt为汇总整理后的硬件信息,如下图。个人感觉“内存”的显示效果是我比较得意的,可以清楚的看到共有多少插槽、插了几根、现有内存的单条容量/频率/厂家代号,这些信息在增加或者更换内存的时候是非常有用的。另外磁盘信息用lsblk命令也更简洁直观

wKioL1X8M13gITmSAAPRibXrMBc252.jpg

    sys_conf目录下,保留了三天以来的系统常用配置文件,包含以下文件

wKioL1X8PAfT2yakAAJIPEJLN8k622.jpg

    看到这里,如果觉得有点用的同学可以接着往下看如何实现了。这套脚本在centos6和7上都试验过。

    我的“监控机”是在内网,通过ssh免秘钥方式可以登到线上各台server(因为免不了要读线上多台server进行批量操作,所以有必要在内网配置一台能免秘钥登录线上server的)。

    主脚本在“监控机”定时运行,通过ips.txt文件获取到线上server的主机名和IP。ips.txt是通过其他方式统计而来(这个就多种多样,最不济就是手动编辑这个)格式如下:web1-x.x.x.x;每行一台。主脚本同过远程执行命令获取相应信息,这里需要在各台“被监控机”上放置两个awk文件servername.awk和mem.awk(通过awk -f 调用,用于获取并格式化输出“机器型号  串号”和“内存”信息)。至于如何将这俩文件批量上传到服务器,不在本文讨论范围。

    最终将所有信息都汇总于“监控机”的/server_info目录下,将web server根目录指向其便可。

    主脚本内容:cat /root/shells/serverinfo.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/bin/sh
 
#通过将各台server的硬件信息记入文本,然后通过web-server进行显示
 
for  server_ip  in  ` cat  /root/shells/ips .txt`  #记录局域网的所有主机ip和主机名
   do
   ip=` echo  $server_ip| awk  -F  '-'  '{print $2}' `    #获取各server IP
   
   ###第一次运行该脚本,最好在以下远程命令部分再加一条yum -y install dmidecode util-linux-ng > /dev/null
   ###以防命令不存在
   ssh  root@$ip " cat  /etc/issue | sed  -n  '1p'  /devinfo/devinfo .txt;
            uname  -a| cut  -d  ' '  -f 2| sed  s/^ /HostName : ' ' / >>  /devinfo/devinfo .txt;
            uname  -a| cut  -d  ' '  -f 3| sed  s/^ /Kernel : ' ' / >>  /devinfo/devinfo .txt;
            dmidecode -t system| awk  -f  /root/shells/servername . awk  >>  /devinfo/devinfo .txt;
            echo  -e  '\n--------CPU:-------'  >>  /devinfo/devinfo .txt;
            lscpu | egrep  - v  'Order|Vendor|Model|Stepping|BogoMIPS|family|On-line|op-mode|CPU\ socket|NUMA\ node0'  >>  /devinfo/devinfo .txt;
            echo  -e  '\n------内存:------'  >>  /devinfo/devinfo .txt;
            dmidecode -t memory| grep  -A7 Physical >>  /devinfo/devinfo .txt;
            dmidecode -t memory| grep  -e  "Size.*[0-9]"  -A8| awk  -f  /root/shells/mem . awk  >>  /devinfo/devinfo .txt;
            echo  -e  '\n-------磁盘:-------'  >>  /devinfo/devinfo .txt;
            lsblk >>  /devinfo/devinfo .txt;
            crontab  -l >  /devinfo/crontab .txt;
            iptables -L -n >  /devinfo/iptables .txt"
 
   mkdir  /server_info/ $server_ip &>  /dev/null
   scp  root@$ip: /devinfo/ /server_info/ $server_ip/
 
   ###从/tmp/$ip 下拷贝系统级配置文件 备份至此
   time =` date  +%F`
   mkdir  -p  /server_info/ $server_ip /sys_conf/ $ time
   cp   /tmp/ $ip/*  /server_info/ $server_ip /sys_conf/ $ time /
   ###保留两天的sys_conf即可
   find  /server_info/ $server_ip /sys_conf  - type  d -mtime +1| xargs  rm  -rf
   
   ###将生产各server/root/shells 下的脚本同步做备份
   rsync  -av --delete root@$ip: /root/shells/  /server_info/ $server_ip /root-shells
   
   echo  -e  "\e[1;31m $server_ip is done \e[0m"
   
done

    主脚本中引用的两个awk文件内容如下

1
2
3
4
5
6
7
8
[root@web1 ~] # cat shells/servername.awk 
$0~  /Product .*/ { printf  "%s" , "\nserver型号: " $(NF-1) " " $NF}
$0~  /Serial .*/ { printf  "%s" ,$0 "\n" }
 
[root@web1 ~] # cat shells/mem.awk 
$0~  /Size .*[0-9]/ { printf  "%s" ,$0 "\t"
$0~  /Speed .*[0-9]/ { printf  "%s" ,$0 "\t\t"
$0~  /Manufacturer .*/ {print  "厂家代号: " $2}

    希望这套脚本能给其他同学带来些许的帮助,也不枉了开源的精神。

    其实这只是本着“让运维简单化”大思想的一个小体现,这套小平台可独立存在,也可与其他平台集成起来。例如我现在就在做一个公司内部的运维平台(技术有限,比较简陋那种~),把日常从Dev到test环境的上线、日志分析平台、以及上文分享的这个server_info平台集成在一起。 






     本文转自kai404 51CTO博客,原文链接:http://blog.51cto.com/kaifly/1696203,如需转载请自行联系原作者

相关文章
|
5天前
|
Linux
|
7天前
|
存储 JSON Linux
|
10天前
|
Shell Linux C语言
|
15天前
|
Linux
linux网络统计信息和端口占用情况基本语法
linux网络统计信息和端口占用情况基本语法
|
22天前
|
Shell Linux
Linux Shell 脚本入门教程:开启你的自动化之旅
Shell是一种计算机程序,它充当了用户与操作系统之间的接口。在Linux系统中,Shell允许用户通过命令行界面(CLI)来控制计算机。Shell脚本则是一种使用Shell语言编写的脚本,它可以自动执行一系列的命令,帮助用户实现任务自动化,提高工作效率。
|
25天前
|
存储 Linux
linux /www/server/cron内log文件占用空间过大,/www/server/cron是什么内容,/www/server/cron是否可以删除
linux /www/server/cron内log文件占用空间过大,/www/server/cron是什么内容,/www/server/cron是否可以删除
23 1
|
1月前
|
监控 Linux BI
【linux服务器系统盘爆满】/www/server/total/logs/目录内容过多导致服务器系统盘爆满,/www/server/total/logs/ 里是什么内容?是否可以删除?
【linux服务器系统盘爆满】/www/server/total/logs/目录内容过多导致服务器系统盘爆满,/www/server/total/logs/ 里是什么内容?是否可以删除?
20 1
|
1月前
|
NoSQL Linux C语言
Linux gdb调试的时候没有对应的c调试信息库怎么办?
Linux gdb调试的时候没有对应的c调试信息库怎么办?
19 1
|
16天前
|
Java Shell Linux
【Linux】手把手教你做一个简易shell(命令行解释器)
【Linux】手把手教你做一个简易shell(命令行解释器)
17 0
|
24天前
|
Shell Linux
Linux环境变量之shell中export定义全局变量和echo 变量的区别
Linux环境变量之shell中export定义全局变量和echo 变量的区别