背景
最近接到一個需求要求每天巡檢各台業務設備,並導出報表,但一想到設備有N台,一台台每天巡檢這樣的重復勞作實在是太傷神了,因此決定寫一個腳本來搞定這件事。
首先,第一個要解決的問題是批量服務器執行命令的問題。
之前嘗試用過pssh來進行批量服務器上執行腳本,限制較少,效果不錯,各位有興趣的可以試一下,本次為了跟上互聯公司的腳步,打算用ansible對服務器進行批量操控。
至於ansible的手冊介紹可以百度下,當然使用ansible的前提是你被控服務器的python 版本2.4以上,控制機的版本要在2.6以上。
ansible的安裝
安裝ez_setup 並執行 安裝命令
wget -q http://peak.telecommunity.com/dist/ez_setup.py python ez_setup.py
esay_install ansible
接下來需要配置下ansible的host文件作為測試。在/etc下創建一個ansible目錄。
mkdir /etc/ansible vi /etc/ansible/hosts # hosts [local] 127.0.0.1
然后運行下命令看看是否成功執行。
ansible all -a "who"
如果發現是密碼驗證方式錯誤則設置一下免密登陸。
ssh-keygen ssh-copy-id -i ~/.ssh/id_rsa.pub root@127.0.0.1
再測試一下該命令發現運行成功了。
至此,該問題解決。
然后,開始考慮各項服務器上的檢測
需求一、檢測服務器的瞬時CPU使用率
參考博文:http://blog.csdn.net/marising/article/details/5182771
http://blog.chinaunix.net/uid-14825809-id-2943235.html
linux基本的cpu的展示屬性總共有7種
1.idle,表示CPU閑置並等待工作分配. |
2.user,表示CPU在運行用戶的進程 |
3.system,表示CPU在執行kernel工作 |
4.nice,表示CPU花費在被nice改變過優先級的process上的時間 |
5.iowait,表示CPU等待IO操作完成的時間 |
6.irq,表示CPU開銷在響應硬中斷上的時間 |
7.softirq,表示CPU開銷在響應軟中斷上的時間 |
屬性較多,都很有用(load average也十分有意義),但基於報表展示精簡考慮,只摘取idle所占用的時間,然后1-idle%即可求出當前cpu屬性。
通過vmstat命令則可以直接查看當前的cpu,內存以及io的屬性信息。
然后可以通過vmstat 1 10 來顯示10s內的cpu屬性值。可以簡單寫出腳本,一條代碼搞定。
vmstat 1 10 | awk 'BEGIN{i=0}NR>2{i+=$15}END{printf("%.1f%\t",100-i/10)}'
需求二、檢測服務器的瞬時內存使用率
查看當前服務器內存使用率有許多方法可以看,比如top、cat /pro/meminfo、vmstat、free或者一些圖形化的工具,在此選擇最簡單的free來操作。
由於linux為將buffers和cached充分利用,能緩存的內容都會盡量往磁盤上緩存,所以服務器的內存使用率=free+buffers+cached
最后“-/+ buffers/cache:”這一行的內容即為當前實際的內存使用率。
統計10s內的內存數值可得如下代碼。
for i in `seq 1 10` do free | fgrep "buffers/cache" sleep 1 done | awk 'BEGIN{a=0;b=0}{a+=$3;b+=$3+$4}END{printf("%.1f%\t",a/b*100)}'
至此完成該需求。
需求三、監測服務器的瞬時硬盤使用率
習慣性地用df 來查看當前硬盤使用率,如圖,直接查看df --total可以堪當當前硬盤的使用率
df --total | fgrep total|awk '{printf("%s\t",$5)}'