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

作为运维人员,了解每台服务器的硬件相关信息以及系统相关配置是必不可少的工作。虽然不难,却很零散,信息集中度不高。故而做了做了一套集中展示以上信息的“平台”(其实谈不上平台,收集-整理-展示而已),其原理由一台“监控机”(暂且这么叫吧)运行主脚本,根据记录服务器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

#!/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 [email protected]$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 [email protected]$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 [email protected]$ip:/root/shells/ /server_info/$server_ip/root-shells
  
  echo -e "\e[1;31m $server_ip is done \e[0m"
  
done

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

[[email protected] ~]# cat shells/servername.awk 
$0~ /Product.*/ {printf "%s","\nserver型号: "$(NF-1)" "$NF}
$0~ /Serial.*/ {printf "%s",$0"\n"}

[[email protected] ~]# 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平台集成在一起。

时间: 2024-10-27 14:14:11

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

利用Python脚本获取Windows和Linux的系统版本信息

查看系统版本信息是一件家常便饭的事情,有时候需要将版本信息录入到资产管理系统中,如果每次手动的去查询这些信息再录入系统那么是一件令人呢头疼的事情,如果采用脚本去完成这件事情,那么情况就有所不同了. 在Python的世界里,获取Windows版本信息和Linux的版本信息都可以采用platform模块,但platform模块也不是万能的,有些特殊的信息(比如Windows的内部版本号)这个模块拿不到,那么只能另辟蹊径了. 在Linux系统中,可以简单的认为一切都是文件,那么就算没有现成的命令可用时

查看linux server网络I/0流量的shell脚本

查看linux server网络流量的shell脚本 上传下载大量文件的时候,可以使用这个脚本来实现监控! #!/bin/sh   ###统计5s内的平均流量,以Mb为单位 if [ "$1" = "" ];then    echo -e "\n      use interface_name after the script,like \"$0 eth0\"...\n"    exit -1 fi   echo -e &qu

Linux基础之-利用shell脚本实现自动监控系统服务

目的:监控集群内nginx及nfs服务运行是否正常,如任一服务异常,则发送邮件通知用户 条件:1. 主机及子机IP地址,hostname已确定: 2. 主机与子机能够免密通讯,即基于密匙通讯(相关命令:ssh-keygen;ssh-copy-id -i web1); 需要的文件:    1. python邮件发送工具: 2. nfc.sh监控脚本,监控nginx及nfs服务状态,并调用mail发送工具通知用户: 3. nfc-install.sh监控部署脚本,运行在主机,为子机配置文件,执行命令

linux下SSH服务利用shell脚本实现密钥的批量分发与执行

SSH项目利用shell脚本实现密钥的批量分发与执行 1 ssh密钥的批量分发 开始安装sshpass免交互工具并进行SSH-key的批量分发 1.1 下载epel源并更新yum仓库 wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo yum -y clean all yum makecache 1.2 安装sshpass工具 yum -y install sshpass 2 创建密钥文件 2

利用SHELL脚本实现将Oracle数据库的每日EXPDP导出文件复制到远程服务器

利用SHELL脚本实现将Oracle数据库的每日EXPDP导出文件复制到远程服务器 作者:赵全文 网名:guestart 我们有一套生产环境的Oracle数据库,虽然每天都有RMAN备份,但是也招架不住开发人员隔三差五就说要恢复几张表的前几天的数据到生产环境当中,针对这样的需求,用RMAN来恢复某几张表的数据就显的特别费劲了.于是我决定用Oracle数据库的逻辑备份工具EXPDP(数据泵导出)专门导出特定用户下的所有表的数据,并在每天凌晨4点通过LINUX操作系统的CRONTAB的计划任务定时执

利用SHELL脚本来验证Oracle数据库RMAN备份集的有效性

利用SHELL脚本来验证Oracle数据库RMAN备份集的有效性 作者:赵全文  网名:guestart 我们生产环境的Oracle数据库都做了RMAN备份,是采用了一周的RMAN备份保留策略:除了使用RMAN备份以外,我们还使用了爱数(Eisoo)备份软件来进行备份,可以说是做到了有备无患.可是,如果有一天,Oracle数据库由于主机层面硬件原因或是数据库层面的原因不能对外提供高可用服务的时候,假设数据丢了一大部分,我们只有用RMAN备份来进行恢复,再如果发现,RMAN备份失效了,那就往地缝里

利用shell脚本实现计划任务功能 V1.2

2013.05.10  mytask 1.2 主程序休眠时间分成若干小的时间片断分段休眠,避免长时间的休眠不能及时响应系统信号. 2013.05.07 mytask 1.1 昨天发布了mytask1.0 版后(利用shell脚本实现计划任务功能),一直在想着如何解决那个最后的遗留问题"每个任务脚本中声明的函数名必须唯一不能重复,否则会导致任务函数覆盖.",无意间自问了一句为什么不能像crontab那样直接调用脚本和命令呢?这一问才让自己回忆起来,之所以用function封装任务是因为早

shell 脚本实战笔记(4)--linux磁盘分区重新挂载

背景: Hadoop的HDFS文件系统的挂载, 默认指定的文件目录是/mnt/disk{N}. 当运维人员, 不小心把磁盘挂载于其他目录, 比如/mnt/data, /mnt/disk01, /mnt/diska时, HDFS会选择根分区, 当往HDFS里灌数据时, 导致的结果往往是根分区被快速的消耗尽, 而其他分区未见使用. 在CDH版本中, HDFS的配置如下所示: dfs.datanode.data.dir => /mnt/disk{N}/dfs/dn dfs.datanode.data.

利用shell脚本或者php移动某个文件夹下的文件到各自的日期组成的目录下

背景是这样的:网站一开始访问量比较小,大家就把所有的图片文件上传到一个目录下(比如是/data/images/).后来访问量大了,图片也多了,这样就影响读取效率.所以有个这样的需求,把这些个图片文件移动到多个目录下,这个目录是图片的上传日期(就是文件属性中的修改日期filemtime)组成的.比如2012-12-20的修改日期,那么现在就该放在/data/images/2012/12/20的目录下. php有很容易的操作文件的函数,可以方便完成.当然也可以利用shell脚本完成. 用shell的