linux 服務器常規巡檢並生成報表(一)

背景

最近接到一個需求要求天天巡檢各臺業務設備,並導出報表,但一想到設備有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

image

至此,該問題解決。

 image

而後,開始考慮各項服務器上的檢測

   

需求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的屬性信息。

image

    而後能夠經過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來操做。

   image

  因爲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)}'

image

  至此完成該需求。

 

需求3、監測服務器的瞬時硬盤使用率

image

   習慣性地用df 來查看當前硬盤使用率,如圖,直接查看df --total能夠堪當當前硬盤的使用率

df --total | fgrep total|awk '{printf("%s\t",$5)}'
相關文章
相關標籤/搜索