mysql google Ubuntu php wordpress 开源 微软 Python apache Windows 程序员 centos nginx java linux Firefox 编程 云计算 shell Android

利用shell腳本“綜合、集中”查看linux server常用軟硬件信息

作為運維人員,了解每臺服務器的硬件相關信息以及系統相關配置是必不可少的工作。雖然不難,卻很零散,信息集中度不高。故而做了做了一套集中展示以 上信息的“平臺”(其實談不上平臺,收集-整理-展示而已),其原理由一臺“監控機”(暫且這麽叫吧)運行主腳本,根據記錄服務器ip的文件循環處理每臺 server;配合“被監控機”上的兩個awk文件(awk規則),將信息統一收集到“監控機”然後由web server進行展示,界面大致如下面圖例。

#註:web server需開啟目錄訪問功能

首頁頁面,所有的服務器都會以一個目錄的形式顯示,目錄內包含該server相關信息

利用Shell腳本“綜合、集中”查看Linux server常用軟硬件信息-shell腳本httpserver
選中某臺server後,進入二級頁面,分別記錄了任務計劃/硬件信息/防火墻設置/root-shell為本人習慣存放shell腳本的目錄/sys_conf為系統常用配置文件

利用shell腳本“綜合、集中”查看linux server常用軟硬件信息-shell腳本
其中,devinfo.txt為匯總整理後的硬件信息,如下圖。個人感覺“內存”的顯示效果是我比較得意的,可以清楚的看到共有多少插槽、插了幾根、現有 內存的單條容量/頻率/廠家代號,這些信息在增加或者更換內存的時候是非常有用的。另外磁盤信息用lsblk命令也更簡潔直觀

利用shell腳本“綜合、集中”查看linux server常用軟硬件信息-shell腳本學習指南
sys_conf目錄下,保留了三天以來的系統常用配置文件,包含以下文件

利用shell腳本“綜合、集中”查看linux server常用軟硬件信息-shell腳本實例
看到這裏,如果覺得有點用的同學可以接著往下看如何實現了。這套腳本在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 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文件內容如下

[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平臺集成在一起。

延伸阅读

    评论