2021-05-12 14:32:11
利用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
# by ljk
#通過將各台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"tt"}
$0~ /Manufacturer.*/ {print "廠家代號: "$2}
希望這套指令碼能給其他同學帶來些許的幫助,也不枉了開源的精神。
其實這只是本著“讓運維簡單”大思想的一個小體現,這套小平台可獨立存在,也可與其他平台整合起來。例如我現在就在做一個公司內部的運維平台(技術有限,比較簡陋那種~),把日常從Dev到test環境的上線、紀錄檔分析平台、以及上文分享的這個server_info平台整合在一起。
本文永久更新連結地址:http://www.linuxidc.com/Linux/2016-10/136218.htm
相關文章