作為運維人員,了解每臺服務器的硬件相關信息以及系統相關配置是必不可少的工作。雖然不難,卻很零散,信息集中度不高。故而做了做了一套集中展示以上信息的“平臺”(其實談不上平臺,收集-整理-展示而已),其原理由一臺“監控機”(暫且這么叫吧)運行主腳本,根據記錄服務器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/serverinfo.sh
#!/bin/sh
#2016/7/12 by Chris_JD
#通過將各臺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文件內容如下
cat shells/servername.awk
-$0~ /Product.*/ {printf "%s","\nserver型號: "$(NF-1)" "$NF}
-$0~ /Serial.*/ {printf "%s",$0"\n"}
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}$0~ /Size.*[0-9]/ {printf "%s",$0"\t"}
$0~ /Speed.*[0-9]/ {printf "%s",$0"\t\t"}
$0~ /Manufacturer.*/ {print "廠家代號: "$2}