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

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

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

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

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

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

看到这里,如果觉得有点用的同学可以接着往下看如何实现了。这套脚本在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,如需转载请自行联系原作者

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

  1. linux网卡O I流量查询,查看linux server网络I/0流量的shell脚本

    查看linux server网络流量的shell脚本 上传下载大量文件的时候,可以使用这个脚本来实现监控!#!/bin/sh ###统计5s内的平均流量,以Mb为单位 if [ "$1&qu ...

  2. 解决Linux下无法利用shell脚本启动conda虚拟环境问题

    解决Linux下无法利用shell脚本启动conda虚拟环境问题 问题 直接在脚本中激活conda环境时遇到了一个问题 解决 查看.bashrc文件 .bashrc文件在 /home/用户名 里面,因 ...

  3. linux遍历目录删除指定文件,利用shell脚本遍历文件夹内所有的文件并作整理统计的方法-linux删除文件夹...

    本篇文章扣丁学堂Linux培训小编给读者们分享一下利用shell脚本遍历文件夹内所有的文件并作整理统计的方法,文章具有很好的参考价值,感兴趣的小伙伴就随小编来了解一下吧. 环境: Ubuntu下采用s ...

  4. linux查看告警日志,shell脚本,用于监视Linux中的消息日志(警告,错误和严重)...

    shell脚本,用于监视Linux中的消息日志(警告,错误和严重) 该脚本将检查文件中的"警告,错误和严重",并在/var/log/messages找到与之相关的邮件时触发给指定电 ...

  5. linux 循环显示所有的sh.*文件.,利用shell脚本遍历文件夹内所有的文件并作整理统计的方法...

    环境: Ubuntu下采用shell脚本实现 案例简述:文件夹内有许多子文件夹,这里需要自动读取所有的文件,包括他们的地址和文件名.通过观察文件名的规律,按照一定的规则裁剪出文件名的某一部分,该部分为 ...

  6. linux中利用shell脚本条件执行linux命令

    linux中利用shell脚本条件执行命令 在linux环境中,我们总会有一些命令需要经常用,例如经常跳转到某些目录下或者执行某些命令,输入一连串的命令是很烦的,此时我们可以预先写一些脚本然后根据我们 ...

  7. linux shell ddos木马,利用Shell 脚本解决DDOS攻击问题

    思路:主要利用 awk ,if结构,sort,uniq #!/bin/bash FilePath="access.log" awk '{print $1}' $FilePath | ...

  8. linux shell 域名 ip,Shell脚本一种检查Linux中域名和IP地址所有权信息、检查多个域名的到期日期工具...

    Shell脚本一种检查Linux中域名和IP地址所有权信息.检查多个域名的到期日期工具 jwhois是一个命令行实用程序,可从whois服务器(whois数据库)中获取有关域名所有权的信息. Whoi ...

  9. mysql shell可视化_shell编程系列24--shell操作数据库实战之利用shell脚本将文本数据导入到mysql中...

    shell编程系列24--shell操作数据库实战之利用shell脚本将文本数据导入到mysql中 利用shell脚本将文本数据导入到mysql中 需求1:处理文本中的数据,将文本中的数据插入到mys ...

最新文章

  1. 递归/回溯:八皇后问题N-Queens
  2. [MicroPython]TurnipBit开发板旋转按钮控制直流电机转速
  3. Mac修改系统用户名好方法(文件无丢失)
  4. matlab项目实例教程,matlab简明实例教程.doc
  5. ajax工作中使用模板
  6. linux mysql 性能提高,高手心得:提高MySQL性能的方法
  7. 客户端远程连接Oracle数据库
  8. cocos2dx在不同安卓机型下scrollview裁剪失败
  9. linux mplayer_移植mplayer播放器到MY-IMX6-EK200开发板的步骤浅析
  10. 开课吧课堂:什么是多线程编程?
  11. 【原文件】辞海(第六版彩图本) pdf
  12. 共享单车数据集_共享单车数据的数据可视化
  13. DCMP2.0项目总结_页面
  14. java中后台的跳转_java后台跳转
  15. 交互体验设计优秀的产品
  16. grails Domian对象转JSON去class以及自己定义字段的最佳方式
  17. 双X轴的Echarts图
  18. android系统息屏设置_安卓实现熄屏功能。
  19. 易语言编程乱码解决方案
  20. Hbase数据库简介

热门文章

  1. JAVA设计模式是个什么玩意儿_00_工厂模式家族准备篇_简单工厂模式
  2. 手机python3ide加法器_VB 加法器 代码,,,求最终代码。。。
  3. 当当网年中图书大促来了,全年买书最好时机
  4. mt6737电池电量计算
  5. 网上看见的一个骑行兄弟的装备,说不定哪天我也出发了
  6. 实时应急通讯的帮手——北斗天地对讲机
  7. 每天三道冲刺工作--有两个房间,一间房里有三盏灯,另一间房有控制着三盏灯的三个开关
  8. go 写入yaml_golang使用yaml格式解析构建配置文件
  9. 苹果主题商店_不等更新丨苹果手机抢先体验微信夜间模式,附详细教程
  10. 川农《土壤污染与防治(本科)》21年12月作业考核