廣義的網站的監控涵蓋所有的非業務行為的數據採集與管理,包括數據分析師和產品設計師使用的網站用戶行為日誌、業務運行數據,以及供運維工程師和開發工程師使用的性能統計數據等。 本文主要是通過shell腳本來收集伺服器性能指標,如系統load、記憶體占用、磁碟IO、CPU占用,並將其寫入一個文件中,及時判斷應 ...
轉載請註明:http://www.cnblogs.com/zishengY/p/6819606.html
廣義的網站的監控涵蓋所有的非業務行為的數據採集與管理,包括數據分析師和產品設計師使用的網站用戶行為日誌、業務運行數據,以及供運維工程師和開發工程師使用的性能統計數據等。
本文主要是通過shell腳本來收集伺服器性能指標,如系統load、記憶體占用、磁碟IO、CPU占用,並將其寫入一個文件中,及時判斷應用情況,防患於未然 。
實現步驟如下:
第一步:編寫shell腳本,如下:
vim check.sh,添加下麵腳本之後保存
1 #!/bin/bash 2 #這個腳本使用來統計CPU、磁碟、記憶體使用率、帶寬的 3 #初始化一些下麵用到的變數 4 total=0 5 system=0 6 user=0 7 i=0 8 9 time=`date "+%Y-%m-%d %k:%M"` 10 day=`date "+%Y-%m-%d"` 11 minute=`date "+%k:%M"` 12 echo "*************************************************************************" >> 123.txt 13 echo "統計開始時間:$day $minute" >> 123.txt 14 15 #帶寬使用情況 16 echo "#帶寬的使用情況:#" >>123.txt 17 #迴圈五次,避免看到的是偶然的數據 18 while (( $i<5 )) 19 do 20 #原先的`ifconfig eth0|sed -n "7p"|awk '{print $2}'|cut -c7-`方式獲取網卡的信息為空,已經註釋掉 21 #rx_before=`ifconfig eth0|sed -n "7p"|awk '{print $2}'|cut -c7-` 22 #tx_before=`ifconfig eth0|sed -n "7p"|awk '{print $6}'|cut -c7-` 23 rx_before=$(cat /proc/net/dev | grep 'eth' | tr : " " | awk '{print $2}') 24 tx_before=$(cat /proc/net/dev | grep 'eth' | tr : " " | awk '{print $10}') 25 #休眠2s 26 sleep 2 27 #用sed先獲取第7列,再用awk獲取第2列,再cut切割,從第7個到最後,即只切割網卡流量數字部分 28 #rx_after=`ifconfig eth0|sed -n "7p"|awk '{print $2}'|cut -c7-` 29 #tx_after=`ifconfig eth0|sed -n "7p"|awk '{print $6}'|cut -c7-` 30 rx_after=$(cat /proc/net/dev | grep 'eth' | tr : " " | awk '{print $2}') 31 tx_after=$(cat /proc/net/dev | grep 'eth' | tr : " " | awk '{print $10}') 32 #註意下麵截取的相差2秒的兩個時刻的累計和發送的bytes(即累計傳送和接受的位) 33 rx_result=$[(rx_after-rx_before)/1024/1024/2*8] 34 tx_result=$[(tx_after-tx_before)/1024/1024/2*8] 35 echo "$time Now_In_Speed: $rx_result Mbps Now_OUt_Speed: $tx_result Mbps" >>123.txt 36 let "i++" 37 done 38 #註意下麵grep後面的$time變數要用雙引號括起來 39 rx_result=$(cat 123.txt|grep "$time"|awk '{In+=$4}END{print In}') 40 tx_result=$(cat 123.txt|grep "$time"|awk '{Out+=$7}END{print Out}') 41 In_Speed=$(echo "scale=2;$rx_result/5"|bc) 42 Out_Speed=$(echo "scale=2;$tx_result/5"|bc) 43 #echo "#帶寬的5次的平均值是:#" >>123.txt 44 echo "$time In_Speed_average: $In_Speed Mbps Out_Speed_average: $Out_Speed Mbps" >>123.txt 45 46 47 #CPU使用情況 48 #使用vmstat 1 5命令統計5秒內的使用情況,再計算每秒使用情況 49 which sar > /dev/null 2>&1 50 if [ $? -ne 0 ] 51 then 52 total=`vmstat 1 5|awk '{x+=$13;y+=$14}END{print x+y}'` 53 average=$(echo "scale=2;$total/5"|bc) 54 fi 55 echo "#CPU使用率:#" >>123.txt 56 echo "Total CPU is already use: $average%" >>123.txt 57 58 59 #磁碟使用情況(註意:需要用sed先進行格式化才能進行累加處理) 60 disk_used=$(df -m | sed '1d;/ /!N;s/\n//;s/ \+/ /;' | awk '{used+=$3} END{print used}') 61 disk_totalSpace=$(df -m | sed '1d;/ /!N;s/\n//;s/ \+/ /;' | awk '{totalSpace+=$2} END{print totalSpace}') 62 disk_all=$(echo "scale=4;$disk_used/$disk_totalSpace" | bc) 63 disk_percent1=$(echo $disk_all | cut -c 2-3) 64 disk_percent2=$(echo $disk_all | cut -c 4-5) 65 disk_warning=`df -m | sed '1d;/ /!N;s/\n//;s/ \+/ /;' | awk '{if ($5>85) print $5 $6;} '` 66 echo "#磁碟利用率#" >>123.txt 67 echo "hard disk has used: $disk_percent1.$disk_percent2%" >>123.txt 68 #echo -e "\t\t.." 表示換行 69 echo -e "\t\t#磁碟存在目錄使用率超過85%報警#" >>123.txt 70 echo -e "\t\tover used: $disk_warning" >>123.txt 71 72 73 #記憶體使用情況 74 #獲得系統總記憶體 75 memery_all=$(free -m | awk 'NR==2' | awk '{print $2}') 76 #獲得占用記憶體(操作系統 角度) 77 system _memery_used =$(free -m | awk 'NR==2' | awk '{print $3}') 78 #獲得buffer、cache占用記憶體,當記憶體不夠時會及時回收,所以這兩部分可用於可用記憶體的計算 79 buffer_used=$(free -m | awk 'NR==2' | awk '{print $6}') 80 cache_used=$(free -m | awk 'NR==2' | awk '{print $7}') 81 #獲得被使用記憶體,所以這部分可用於可用記憶體的計算,註意計算方法 82 actual_used_all =$[memery_all-(free+buffer_used+cache_used)] 83 #獲得實際占用的記憶體 84 actual_used_all=`expr $memery_all - $free + $buffer_used + $cache_used ` 85 echo "$used_all" >> 123.txt 86 memery_percent=$(echo "scale=4;$system _memery_used / $memery_all" | bc) 87 memery_percent2=$(echo "scale=4; $actual_used_all / $memery_all" | bc) 88 percent_part1=$(echo $memery_percent | cut -c 2-3) 89 percent_part2=$(echo $memery_percent | cut -c 4-5) 90 percent_part11=$(echo $memery_percent2 | cut -c 2-3) 91 percent_part22=$(echo $memery_percent2 | cut -c 4-5) 92 echo "#記憶體使用率#" >> 123.txt 93 #獲得占用記憶體(操作系統角度) 94 echo "system memery is already use: $percent_part1.$percent_part2%" >>123.txt 95 #獲得實際記憶體占用率 96 echo "actual memery is already use: $percent_part11.$percent_part22%" >>123.txt 97 echo "buffer is already used : $buffer_used M" >>123.txt 98 echo "cache is already used : $cache_used M" >>123.txt 99 100 101 echo "結束本次統計:$day $minute" >> 123.txt 102 echo "*************************************************************************" >> 123.txt 103 echo -e "\n\n\n\n" >> 123.txt
第二步:創建shell腳本中用到的文件123.txt
touch 123.txt
第三步:給check.sh和123.txt授予所有許可權
chmod 777 check.sh
chmod 777 123.txt
第四步:執行check.sh腳本
./check.sh
第五步:查看執行寫入文件的情況
出現這信息表名腳本成功運行實時統計情況。
若是想使用定時任務,可使用crontab進行設置,請參見這篇文章
crontab的兩種配置方式