最近接到一個需求要求天天巡檢各臺業務設備,並導出報表,但一想到設備有N臺,一臺臺天天巡檢這樣的重複勞做實在是太傷神了,所以決定寫一個腳原本搞定這件事。html
首先,第一個要解決的問題是批量服務器執行命令的問題。 python
以前嘗試用過pssh來進行批量服務器上執行腳本,限制較少,效果不錯,各位有興趣的能夠試一下,本次爲了跟上互聯公司的腳步,打算用ansible對服務器進行批量操控。linux
至於ansible的手冊介紹能夠百度下,固然使用ansible的前提是你被控服務器的python 版本2.4以上,控制機的版本要在2.6以上。緩存
ansible的安裝服務器
安裝ez_setup 並執行 安裝命令ssh
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"
若是發現是密碼驗證方式錯誤則設置一下免密登錄。ui
ssh-keygen ssh-copy-id -i ~/.ssh/id_rsa.pub root@127.0.0.1
再測試一下該命令發現運行成功了。spa
至此,該問題解決。
而後,開始考慮各項服務器上的檢測
需求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)}'
需求2、檢測服務器的瞬時內存使用率
查看當前服務器內存使用率有許多方法能夠看,好比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)}'
至此完成該需求。
需求3、監測服務器的瞬時硬盤使用率
習慣性地用df 來查看當前硬盤使用率,如圖,直接查看df --total能夠堪當當前硬盤的使用率
df --total | fgrep total|awk '{printf("%s\t",$5)}'