1. 程式人生 > >linux服務器性能(網卡流量、CPU、內存、磁盤使用率)監控

linux服務器性能(網卡流量、CPU、內存、磁盤使用率)監控

平均值 行數據 blog sar 處理 行為 amp 利用 %d

  廣義的網站的監控涵蓋所有的非業務行為的數據采集與管理,包括數據分析師和產品設計師使用的網站用戶行為日誌、業務運行數據,以及供運維工程師和開發工程師使用的性能統計數據等。

本文主要是通過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 "*************************************************************************" >> 1234.txt 13 echo "統計開始時間:$day $minute" >> 1234.txt 14 15 #帶寬使用情況 16 echo
"#帶寬的使用情況:#" >>1234.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" >>1234.txt 36 let "i++" 37 done 38 #註意下面grep後面的$time變量要用雙引號括起來 39 rx_result=$(cat 1234.txt|grep "$time"|awk {In+=$4}END{print In}) 40 tx_result=$(cat 1234.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次的平均值是:#" >>1234.txt 44 echo "$time In_Speed_average: $In_Speed Mbps Out_Speed_average: $Out_Speed Mbps" >>1234.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使用率:#" >>1234.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和1234.txt
    touch 123.txt
 第三步:給check.sh和123.txt授予所有權限
  chmod 777 check.sh
  chmod 777 123.txt

技術分享

  第四步:執行check.sh腳本

    ./check.sh

技術分享

  第五步:查看執行寫入文件的情況

技術分享

出現這信息表名腳本成功運行實時統計情況。

若是想使用定時任務,可使用crontab進行設置,請參見這篇文章

crontab的兩種配置方式

linux服務器性能(網卡流量、CPU、內存、磁盤使用率)監控